当前位置: 首页 > 面试题库 >

Python-使用带超时的模块“subprocess”

羊舌光赫
2023-03-14
问题内容

这是运行任意命令以返回其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可能需要永远运行。

在打算在WindowsLinux上运行的Python程序中实现超时的最简单方法是什么?


问题答案:

在Python 3.3+中:

from subprocess import STDOUT, check_output

output = 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使用urllib模块的urlopen超时问题解决方法,包括了Python使用urllib模块的urlopen超时问题解决方法的使用技巧和注意事项,需要的朋友参考一下 在新的公司开始上班,今天工作的主题内容是市场部门需要抓取一些论坛用户的邮箱,以便发送营销邮件。 于是用了一个python脚本来执行,前面抓了几个都没有什么问题,后来碰到一个论坛,在执行urlopen的地方总是

  • 本文向大家介绍python xlsxwriter模块的使用,包括了python xlsxwriter模块的使用的使用技巧和注意事项,需要的朋友参考一下   1.workbook类 add_worksheet   用于添加一个新的工作表,sheetname为工作表名称,默认是sheet1,例如: add_format   用于在工作表中创建一个新的格式对象来格式化单元格 add_chart   用于

  • 问题内容: 我正在优化复杂模拟的参数。我使用多处理模块来增强优化算法的性能。我在http://pymotw.com/2/multiprocessing/basics.html上了解了多处理的基础知识。复杂的模拟根据优化算法中给定的参数持续不同的时间,大约1到5分钟。如果参数选择不正确,则模拟可能会持续30分钟或更长时间,结果将无用。因此,我正在考虑为多处理建立超时,该超时将终止所有持续超过定义时间

  • 我在stackoverflow上看到过一种使用zip文件存储引用的python模块来执行hadoop流作业的技术。 在执行作业的映射阶段,我遇到了一些错误。我相当确定它与zip'd模块加载有关。 为了调试脚本,我使用命令行管道通过sys.stdin/sys.stdout运行我的数据集,进入我的映射器和缩减器,如下所示: 输入数据文件的头。txt|./映射器。py |排序-k1,1|./reduce

  • 本文向大家介绍python os模块和fnmatch模块的使用介绍,包括了python os模块和fnmatch模块的使用介绍的使用技巧和注意事项,需要的朋友参考一下 一、先介绍一下os模块 1、拆分路径的方法介绍 2、构建文件路径的方法介绍 3、获取文件属性的方法介绍 4、判断文件的类型 5、文件和目录操作 6、修改文件属性和判断文件属性 7、遍历目录树 二、fnmatch模块介绍 1、fnma

  • 本文向大家介绍Python hashlib模块的使用示例,包括了Python hashlib模块的使用示例的使用技巧和注意事项,需要的朋友参考一下 一.hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 :SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法。 1.使用hashlib模块进行MD5加密。 注:hashlib.md5():创