python:运行超时进程并捕获stdout、stderr和退出状态

标签 python process external-process

<分区>

Possible Duplicate:
subprocess with timeout

在 Python 中执行以下操作的最简单方法是什么:

  • 运行外部进程
  • 捕获字符串中的标准输出、标准错误和退出状态
  • 设置超时。

我想要这样的东西:

import proc

try:
    status, stdout, stderr = proc.run(["ls", "-l"], timeout=10)
except proc.Timeout:
    print "failed"

最佳答案

我讨厌一个人做这项工作。只需将其复制到您的 proc.py 模块中即可。

import subprocess
import time
import sys

class Timeout(Exception):
    pass

def run(command, timeout=10):
    proc = subprocess.Popen(command, bufsize=0, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    poll_seconds = .250
    deadline = time.time()+timeout
    while time.time() < deadline and proc.poll() == None:
        time.sleep(poll_seconds)

    if proc.poll() == None:
        if float(sys.version[:3]) >= 2.6:
            proc.terminate()
        raise Timeout()

    stdout, stderr = proc.communicate()
    return stdout, stderr, proc.returncode

if __name__=="__main__":
    print run(["ls", "-l"])
    print run(["find", "/"], timeout=3) #should timeout

关于python:运行超时进程并捕获stdout、stderr和退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1556348/

相关文章:

python - Flask - 不允许使用 POST 错误 405 方法

c++ - MacOS - 如何使用 C/C++ 获取具有 PID 的进程用户/所有者?

c++ - 重定向子进程的输入和输出不起作用

java - 在 Java 中生成带参数的 linux 命令

ssis - SSIS处理外部问题

java - 使用自定义参数运行外部程序

lua - 使用环境调用 popen

python - 如何在使用 pandas 将 xlsx 转换为 csv 后删除索引列

python - 为什么在 Flask 中调用第一个请求后阻止任何设置方法?

python - 选择Python类在运行时根据用户输入或命令行参数进行实例化