蟒蛇:运行带有超时和捕获标准输出,标准错误和退出状态[复制]的过程(python: run a pr

2019-08-17 20:26发布

可能重复:
子与超时

什么是做到以下几点Python中最简单的方法:

  • 运行一个外部进程
  • 捕获在一个字符串标准输出,标准错误,并退出状态
  • 设置超时。

我想是这样的:

import proc

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

Answer 1:

我讨厌我自己做的工作。 只要复制到您的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


Answer 2:

注意上的coreutils> = 7.0,你可以在前面加上超时命令如Linux:

timeout 1 sleep 1000


文章来源: python: run a process with timeout and capture stdout, stderr and exit status [duplicate]