subprocess:如果wait()终止,可以通信()超时吗?

时间:2016-04-29 14:36:01

标签: python python-3.x subprocess

Popen.communicate(timeout=2)是否有可能引发TimeoutExpired,即使我声称Popen.poll() is not NonePopen.wait(2) 会引发异常?

修改:docs建议使用以下代码段:

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()

但这只会引发ProcessLookupError: [Errno 3] No such process。这是有道理的,因为我已经通过pollwait终止了此过程。

1 个答案:

答案 0 :(得分:1)

是。如果孩子产生自己的子过程是可能的。 Popen.communicate()可能会在仅等待孩子的Popen.wait()之后返回。请参阅Python subprocess' check_call() vs check_output()

注意:proc.kill()可能不会终止整个进程树。请参阅How to terminate a python subprocess launched with shell=True