我有一个我正在使用的工具,我需要它来运行解析器并输出另一个分析日志。目前我拥有它,所以它通过网络界面。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