使用Popen和start / wait在python中运行子进程时无法获取退出代码

时间:2018-05-13 10:40:12

标签: python windows command-line popen exit-code

我正在尝试创建一个启动新窗口并等待它完成的python脚本,然后检索退出代码。所以我使用Popen与start /wait为它创建一个单独的窗口,但这不能正确转发退出代码。

此代码总结了问题:

import subprocess

params = {}
params['stdout'] = subprocess.PIPE
params['stderr'] = subprocess.PIPE
params['shell'] = True

proc = subprocess.Popen('start /wait cmd /c exit 1', **params)

# This works but the above line does not
#proc = subprocess.Popen('exit 1', **params)

resultCode = proc.wait()

print(resultCode)

start /wait的文档表明它应该返回退出代码,当我手动运行它然后检查%ERRORLEVEL%它看起来是正确的,所以我不确定我做错了什么

1 个答案:

答案 0 :(得分:0)

使用

proc = subprocess.Popen('call cmd /c exit 1', **params)

而不是start /wait代替resultCode中的错误代码1。

根据这个问题和答案的逻辑:CALL command vs. START with /WAIT option

我的猜测是差异在于start /wait不会在相同的环境中共享变量而call会这样做。