【发布时间】:2012-07-04 06:33:22
【问题描述】:
我有一个正在使用的工具,我需要它来运行解析器并输出另一个分析日志。目前我有它,所以它是通过网络界面。
- 用户转到表单并提交文件名以进行解析(文件已在系统上)。
- 表单向 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 真的会停止脚本吗?
抱歉,我无法显示完整的代码,因为它是“机密”,但希望其中的逻辑可以被理解。
【问题讨论】:
标签: python cgi subprocess