什麼是做在Python以下最簡單的方法:
- 運行外部進程
- 捕獲字符串stderr中的stdout和退出狀態
- 設置超時。
我想是這樣的:
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模塊中即可。與Linux的coreutils的
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
注> = 7.0,你可以在前面加上超時像命令:
timeout 1 sleep 1000
只是讓我們知道你是從開始,您曾經考慮過'subprocess'模塊? http://docs.python.org/library/subprocess.html – 2009-10-12 19:11:58
不 - 看起來像是一個巨大的飛躍 – flybywire 2009-10-12 19:15:38
子進程'Popen.communicate超時,類似的問題:http://stackoverflow.com/questions/1191374/子進程超時 – Mark 2009-10-12 19:15:45