在超时使用模块“子进程”下面是运行返回它的任意命令的Python代码stdout数据,或对非零退出代码引发异常:proc = subprocess.Popen(
cmd,
stderr=subprocess.STDOUT, # Merge stdout and stderr
stdout=subprocess.PIPE,
shell=True)communicate用于等待进程退出:stdoutdata, stderrdata = proc.communicate()这个subprocess因此,模块不支持超时-停止运行超过X秒的进程的能力-因此,communicate可能要花很长时间才能跑。什么是最简单在运行在Windows和Linux上的Python程序中实现超时的方法?
3 回答
![?](http://img1.sycdn.imooc.com/533e50ed0001cc5b02000200-100-100.jpg)
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
from subprocess import STDOUT, check_output output = check_output(cmd, stderr=STDOUT, timeout=seconds)
output
CalledProcessError
proc.communicate()
shell=True
cmd
shell=True
check_output()
subprocess32
![?](http://img1.sycdn.imooc.com/545865470001bf9402200220-100-100.jpg)
ITMISS
TA贡献1871条经验 获得超8个赞
import shlexfrom subprocess import Popen, PIPEfrom threading import Timerdef run(cmd, timeout_sec): proc = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE) timer = Timer(timeout_sec, proc.kill) try: timer.start() stdout, stderr = proc.communicate() finally: timer.cancel()# Examples: both take 1 secondrun("sleep 1", 5) # process ends normally at 1 secondrun("sleep 5", 1) # timeout happens at 1 second
添加回答
举报
0/150
提交
取消