这是运行任意命令返回其 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 程序中实现超时的 最简单 方法是什么?
原文由 Sridhar Ratnakumar 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Python 3.3+ 中:
output
是一个字节字符串,包含命令的合并标准输出、标准错误数据。check_output
引发CalledProcessError
问题文本中指定的非零退出状态不同于proc.communicate()
方法。我删除了
shell=True
因为它经常被不必要地使用。如果cmd
确实需要,您可以随时将其添加回来。如果您添加shell=True
即,如果子进程生成自己的后代;check_output()
可以比超时指示晚得多返回,请参阅 子进程超时失败。超时功能在 Python 2.x 上可用,通过
subprocess32
3.2+ 子进程模块的反向端口。