@@ -181,23 +181,26 @@ def cmd_output(*cmd, **kwargs):
181181 for key , value in kwargs .pop ('env' , {}).items ()
182182 ) or None
183183
184- cmd = parse_shebang .normalize_cmd (cmd )
185-
186- popen_kwargs .update (kwargs )
187- proc = __popen (cmd , ** popen_kwargs )
188- stdout , stderr = proc .communicate ()
189- if encoding is not None and stdout is not None :
190- stdout = stdout .decode (encoding )
191- if encoding is not None and stderr is not None :
192- stderr = stderr .decode (encoding )
193- returncode = proc .returncode
184+ try :
185+ cmd = parse_shebang .normalize_cmd (cmd )
186+ except parse_shebang .ExecutableNotFoundError as e :
187+ returncode , stdout , stderr = (- 1 , e .args [0 ].encode ('UTF-8' ), b'' )
188+ else :
189+ popen_kwargs .update (kwargs )
190+ proc = __popen (cmd , ** popen_kwargs )
191+ stdout , stderr = proc .communicate ()
192+ if encoding is not None and stdout is not None :
193+ stdout = stdout .decode (encoding )
194+ if encoding is not None and stderr is not None :
195+ stderr = stderr .decode (encoding )
196+ returncode = proc .returncode
194197
195198 if retcode is not None and retcode != returncode :
196199 raise CalledProcessError (
197200 returncode , cmd , retcode , output = (stdout , stderr ),
198201 )
199202
200- return proc . returncode , stdout , stderr
203+ return returncode , stdout , stderr
201204
202205
203206def rmtree (path ):
0 commit comments