Python-使用带超时的模块“subprocess”
这是运行任意命令以返回其stdout数据或在非零退出代码上引发异常的Python代码:
proc = subprocess.Popen( cmd,
stderr=subprocess.STDOUT, # Merge stdout and stderr
stdout=subprocess.PIPE,
shell=True)
communicate
用于等待进程退出:
stdoutdata, stderrdata = proc.communicate()
该subprocess
模块不支持超时-杀死运行时间超过X秒的进程的能力-因此communicate
可能需要永远运行。
在打算在Windows
和Linux
上运行的Python程序中实现超时的最简单方法是什么?
回答:
在Python 3.3+中:
from subprocess import STDOUT, check_outputoutput = check_output(cmd, stderr=STDOUT, timeout=seconds)
output
是一个字节字符串,其中包含命令的合并标准输出,标准错误数据。
check_output
加注CalledProcessError
在不同问题的文本中指定的非零退出状态proc.communicate()
的方法。
我已删除,shell=True
因为它经常被不必要地使用。如果cmd确实需要,可以随时将其添加回去。如果添加,shell=True
即子进程是否产生了自己的后代;check_output()
可以比超时指示晚得多返回,请参阅子进程超时失败。
超时功能可在Python 2.x
上通过subprocess323.2+
子进程模块的反向端口使用。
以上是 Python-使用带超时的模块“subprocess” 的全部内容, 来源链接: utcz.com/qa/434465.html