使用subprocess.Popen在Python中检查进程的状态

11 python multiprocessing

如果我用subprocess.PopenPython 调用进程如下:

myproc = subprocess.Popen(...).communicate()

查看其状态的正确方法是什么?不是它输出到stdout或stderr,而是它的退出状态一旦完成(例如0表示成功或另一表示失败)?

小智 22

returncode 确实是答案,但解决方案不需要复杂.

process = subprocess.Popen(...)
stdoutdata, stderrdata = process.communicate()
print process.returncode
Run Code Online (Sandbox Code Playgroud)

Python subprocess文档中的更多信息.

  • @ user248237文档说"返回代码,由`poll()`和`wait()`设置(并间接由`communic()`)." 所以`communic()`应该注意等待进程结束. (5认同)

Kat*_*iel 7

在完成执行之前,进程没有返回代码.因此,如果还没有完成,你必须决定你想做什么:等待它,或者返回一些"我还没有完成"的指示.

如果要等待,请使用communicate然后检查returncode属性.

如果要检查是否设置了返回代码,None如果没有,则返回,请使用Popen.poll().

Popen.poll()

检查子进程是否已终止.设置并返回returncode属性.

(如果流程尚未终止,则poll()返回None)