2323
2424class ShellReturn :
2525 def __init__ (self ):
26+ # note: stderr is never captured
2627 self .stdout = None
27- self .stderr = None
2828 self .exit_code = None
2929 self .errmsg = None
3030 self .is_submake = False
@@ -122,35 +122,28 @@ def execute(cmd_str, symbol_table, use_default_shell=True, capture=True):
122122
123123 logger .debug ("cmd=>>>%s<<<" , cmd )
124124
125- try :
126- if capture :
127- p = subprocess .run (cmd ,
128- shell = False ,
129- stdout = subprocess .PIPE ,
130- universal_newlines = True ,
131- check = False , # we'll check returncode ourselves
132- env = env
133- )
134- else :
135- p = subprocess .run (cmd ,
136- shell = False ,
137- universal_newlines = True ,
138- check = False , # we'll check returncode ourselves
139- env = env
140- )
125+ kwargs = {
126+ "shell" :False ,
127+ "universal_newlines" :True ,
128+ "check" :False , # we'll check returncode ourselves
129+ "env" :env
130+ }
131+ if capture :
132+ kwargs ["stdout" ] = subprocess .PIPE
141133
134+ try :
135+ p = subprocess .run (cmd , ** kwargs )
136+ #
142137 logger .debug ("shell ts=%f exit status=%r" , ts , p .returncode )
143138# if p.returncode != 0:
144139# breakpoint()
145140 return_status .exit_code = p .returncode
146141 return_status .stdout = p .stdout
147- # return_status.stderr = p.stderr
148142 except OSError as err :
149143 logger .error ("shell ts=%f error=\" %s\" " , ts , err )
144+ # match gnu make's output
150145 return_status .exit_code = 127
151146 return_status .stdout = ""
152- # match gnu make's output
153- return_status .stderr = err .strerror
154147
155148 if cmd_str .startswith (submake .getname ()):
156149 return_status .is_submake = True
@@ -183,7 +176,6 @@ def execute_tokens(token_list, symbol_table):
183176 # "If the result of the execution ends in a newline, that one newline is
184177 # removed; all other newlines are replaced by spaces." GNU Make PDF
185178 exe_result .stdout = exe_result .stdout .strip ().replace ("\n " , " " )
186- # exe_result.stderr = exe_result.stderr.strip().replace("\n", " ")
187179
188180 # save shell status
189181 pos = token_list [0 ].get_pos ()
@@ -201,12 +193,8 @@ def execute_tokens(token_list, symbol_table):
201193 if exe_result .errmsg :
202194 error_message (pos , exe_result .errmsg )
203195 else :
204- # otherwise report stderr (if any)
205- if exe_result .stderr :
206- logger .error ("command at %r failed with exit_code=%d" , pos , exe_result .exit_code )
207- # error_message(pos, exe_result.stderr)
208- else :
209- logger .error ("command at %r failed with exit_code=%d (but stderr empty)" , pos , exe_result .exit_code )
196+ # stderr already sent to the world
197+ logger .error ("command at %r failed with exit_code=%d" , pos , exe_result .exit_code )
210198
211199 return exe_result .stdout
212200
0 commit comments