我搜索了互聯網並學習了其他實現方法 現在我已經發現了這個問題。如果我在subprocess.Popen中寫stdout = subprocess.PIPE,我的執行時間總是會超過 超時。如果我刪除它,然後它正在正常運行時間在超時後終止Python中的子進程
import subprocess, datetime, os, time, signal
//setting time for timeout
timeout=3
start = datetime.datetime.now()
process = subprocess.Popen(["python", "/home/bourne/untitled.py"],shell=False, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while process.poll() is None:
time.sleep(0.1)
now = datetime.datetime.now()
if (now - start).seconds > timeout:
os.kill(process.pid, signal.SIGKILL)
os.waitpid(-1, os.WNOHANG)
print "error"
print (now - start).seconds
break
print (now - start).seconds
我搜索互聯網,發現實施它的其他方式。感謝您的答覆。現在我遇到了stdout = subprocess.PIPE的問題。如果我寫它,那麼它正在執行更多的正常執行時間。 – Jack
@KevalVora - 你看起來似乎只有在流程結束後才能讀取管道。如果管道的緩衝區已滿,則子進程將掛起,直到您讀取它或被終止。而使用'time.time'而不是'datetime'會更快。 – mata
我需要運行用戶提交的程序,並檢查是否已成功執行,如果有無限循環,我需要殺死該進程,並且需要向用戶顯示輸出。你能爲此提出任何解決方案嗎? – Jack