【发布时间】:2012-06-28 04:04:57
【问题描述】:
我有一个向这个 cgi 脚本提交数据的页面,然后这个脚本调用另一个可执行文件。问题是这个可执行文件需要很长时间才能运行,因此,它会导致 cgi 脚本停止直到完成。我正在尝试找到一种在后台运行它的方法。我在linux机器上用python编码。我遇到的问题是当脚本结束时(父进程被杀死),子进程也被 init 终止(根据 linux 规范)。我用谷歌搜索了一下,我遇到了这个线程: Calling an external command in Python
然后我在我的代码中尝试了以下内容:
print <html code>
pid = subprocess.Popen([sys.executable, '/path/to/executable.py '+arg1],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
...
retval = pid.wait()
#For debugging purposes:
print str(retval) + "<br/>"
print </html code>
这给了我一个 '2' 的 retval,我确定这意味着有问题(因为我没有看到正确的输出) 我尝试了其他一些方法,但它要么运行脚本并需要一段时间才能加载(意味着它在前台运行),要么就是无法一起运行脚本。
想法?谢谢你。 哦,顺便说一句,我使用的是 python 2.6
【问题讨论】:
-
外部进程是做什么的?如果速度很慢,要么缓存结果,要么使用 AJAX 让页面立即加载,完成后数据显示在页面上。
-
它做了很多数据驱动的计算。它不会更新它所在的即时页面,它会更新显示所有数据的 html 页面。我不在乎页面是否立即更新,我只是不希望它在点击提交按钮时不会挂起。我希望它转到生成后台进程的提交成功页面(python 脚本)
-
那么在完成输出 HTML 之前,您不想等待子进程完成,因为那会挂起。 wait() 等待孩子结束。 docs.python.org/library/subprocess.html#popen-objects 。另见:docs.python.org/library/…
标签: python subprocess process