可能重复:
子与超时
什么是做到以下几点Python中最简单的方法:
- 运行一个外部进程
- 捕获在一个字符串标准输出,标准错误,并退出状态
- 设置超时。
我想是这样的:
import proc
try:
status, stdout, stderr = proc.run(["ls", "-l"], timeout=10)
except proc.Timeout:
print "failed"
可能重复:
子与超时
什么是做到以下几点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
注意上的coreutils> = 7.0,你可以在前面加上超时命令如Linux:
timeout 1 sleep 1000