下面是运行任意命令返回其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程序中实现超时的simplest种方式是什么?

推荐答案

在Python 3.3+中:

from subprocess import STDOUT, check_output

output = check_output(cmd, stderr=STDOUT, timeout=seconds)

output是包含命令的合并标准输出(Stderr)数据的字节字符串.

proc.communicate()方法不同,check_output在问题文本中指定的非零退出状态下引发CalledProcessError.

我删除了shell=True,因为它经常被不必要地使用.如果cmd确实需要,您可以随时将其添加回来.如果添加shell=True,也就是说,如果子进程派生自己的子代;check_output()返回的时间可能比超时指示的时间晚得多,请参见Subprocess timeout failure.

Python 2上提供了超时功能.x通过3.2+子流程模块的subprocess32个后端口.

Python相关问答推荐

Inquirer库不适用于Pyterfly

在Python中是否可以输入使用任意大小参数列表的第一个元素的函数

重命名变量并使用载体中的字符串存储 Select 该变量

使用itertools出现第n个子串

有什么方法可以修复奇怪的y轴Python matplotlib图吗?

情节生成的饼图文本超出页面边界

如何使用函数正确索引收件箱?

已删除的构造函数调用另一个构造函数

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

根据在同一数据框中的查找向数据框添加值

将jit与numpy linSpace函数一起使用时出错

pandas滚动和窗口中有效观察的最大数量

C#使用程序从Python中执行Exec文件

log 1 p numpy的意外行为

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

如何在solve()之后获得症状上的等式的值

我对我应该做什么以及我如何做感到困惑'

形状弃用警告与组合多边形和多边形如何解决

根据列值添加时区

matplotlib + python foor loop