我有一個我正在使用的工具,我需要它來運行解析器並輸出另一個分析日誌。目前我擁有它,所以它通過網絡界面。Python子流程Popen失速CGI頁面
- 用戶進入的形式和(已在文件系統)提交的文件名解析。
- 表單將信息提交給Python CGI腳本
- Python CGI腳本運行併產生一個子進程來運行解析。
- 解析器找到適用於分析的信息並生成子進程。
我使用
import subprocess
...
subprocess.Popen(["./program.py", input])
在我的代碼,我從文檔,我們沒有在子進程等待終止假設,我們只是不停地運行該腳本。啓動這一切我的CGI腳本的作用:
subprocess.Popen(["./program.py", input])
// HTML generation code
// Javascript to refresh after 1 second to a different page
的HTML代碼生成的輸出只是我們處理的請求,然後JavaScript的刷新頁面到主主頁的狀態。
的問題
的CGI頁面掛起,直到子進程完成,這不是我想要的。我認爲Popen不會等待子流程完成,但是每當我運行這個工具時,它都會停止,直到它完成。我希望腳本完成並讓子進程在後臺運行,並讓網頁仍然正常運行,而用戶不會認爲所有內容都只是通過加載信號停滯。
我似乎無法找到任何理由爲什麼Popen會這樣做,因爲我讀過它的每一個地方說它不會等待,但它似乎。
奇怪的還有一點是,apache日誌顯示:「請求正文讀取超時」以及腳本完成之前。那麼Apache是否真的拖延了腳本呢?
對不起,我不能顯示完整的代碼,因爲它是「機密的」,但希望邏輯有待理解。
謝謝,我想了很多,然後我很早就偶然發現了這個線程,現在我決定嘗試去完成他們對Popen的全部命令:http://stackoverflow.com/questions/546017/how -do-i-run-another-script-in-python-without-wait-for-it-to-finish由於某種原因,它現在可以工作。包括stdout和stderr參數似乎允許腳本結束,而不是等待子進程。謝謝! – richardhsu