@@ -44,6 +44,7 @@ def __init__(self): # type: () -> None
44
44
self .builder = None # type: Builder
45
45
self .joborder = None # type: Dict[str,str]
46
46
self .stdin = None # type: str
47
+ self .stderr = None # type: str
47
48
self .stdout = None # type: str
48
49
self .successCodes = None # type: Iterable[int]
49
50
self .temporaryFailCodes = None # type: Iterable[int]
@@ -137,6 +138,7 @@ def run(self, dry_run=False, pull_image=True, rm_container=True,
137
138
env [key ] = value
138
139
139
140
stdin = None # type: Union[IO[Any],int]
141
+ stderr = None # type: IO[Any]
140
142
stdout = None # type: IO[Any]
141
143
142
144
scr , _ = get_feature (self , "ShellCommandRequirement" )
@@ -146,12 +148,13 @@ def run(self, dry_run=False, pull_image=True, rm_container=True,
146
148
else :
147
149
shouldquote = needs_shell_quoting_re .search
148
150
149
- _logger .info (u"[job %s] %s$ %s%s%s" ,
151
+ _logger .info (u"[job %s] %s$ %s%s%s%s " ,
150
152
self .name ,
151
153
self .outdir ,
152
154
" \\ \n " .join ([shellescape .quote (str (arg )) if shouldquote (str (arg )) else str (arg ) for arg in (runtime + self .command_line )]),
153
155
u' < %s' % (self .stdin ) if self .stdin else '' ,
154
- u' > %s' % os .path .join (self .outdir , self .stdout ) if self .stdout else '' )
156
+ u' > %s' % os .path .join (self .outdir , self .stdout ) if self .stdout else '' ,
157
+ u' \2 > %s' % os .path .join (self .outdir , self .stderr ) if self .stderr else '' )
155
158
156
159
if dry_run :
157
160
return (self .outdir , {})
@@ -178,6 +181,15 @@ def run(self, dry_run=False, pull_image=True, rm_container=True,
178
181
else :
179
182
stdin = subprocess .PIPE
180
183
184
+ if self .stderr :
185
+ abserr = os .path .join (self .outdir , self .stderr )
186
+ dnerr = os .path .dirname (abserr )
187
+ if dnerr and not os .path .exists (dnerr ):
188
+ os .makedirs (dnerr )
189
+ stderr = open (absout , "wb" )
190
+ else :
191
+ stderr = sys .stderr
192
+
181
193
if self .stdout :
182
194
absout = os .path .join (self .outdir , self .stdout )
183
195
dn = os .path .dirname (absout )
@@ -191,6 +203,7 @@ def run(self, dry_run=False, pull_image=True, rm_container=True,
191
203
shell = False ,
192
204
close_fds = True ,
193
205
stdin = stdin ,
206
+ stderr = stderr ,
194
207
stdout = stdout ,
195
208
env = env ,
196
209
cwd = self .outdir )
@@ -203,6 +216,9 @@ def run(self, dry_run=False, pull_image=True, rm_container=True,
203
216
if isinstance (stdin , file ):
204
217
stdin .close ()
205
218
219
+ if stderr is not sys .stderr :
220
+ stderr .close ()
221
+
206
222
if stdout is not sys .stderr :
207
223
stdout .close ()
208
224
0 commit comments