python: run a process with timeout and capture stdout, stderr and exit status
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
subprocess with timeout
在Python中执行以下操作的最简单方法是什么:
- 运行外部流程
- 捕获字符串,stderr和退出状态中的stdout
- 设置超时。
我想要这样的东西:
1 2 3 4 5 6 | import proc try: status, stdout, stderr = proc.run(["ls","-l"], timeout=10) except proc.Timeout: print"failed" |
我不喜欢自己做这项工作。 只需将其复制到proc.py模块即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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的注意事项,你可以在命令之前添加超时,如:
1 | timeout 1 sleep 1000 |