python stdout timeout_python:运行带有超时的进程并捕获stdout,stderr和退出状态

What is the easiest way to do the following in Python:

Run an external process

Capture stdout in a string, stderr, and exit status

Set a timeout.

I would like something like this:

import proc

try:

status, stdout, stderr = proc.run(["ls", "-l"], timeout=10)

except proc.Timeout:

print "failed"

解决方案

I hate doing the work by myself. Just copy this into your proc.py module.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值