在后台运行可执行文件的CGI脚本

时间:2012-06-26 18:52:12

标签: python subprocess process

我有一个向这个cgi脚本提交数据的页面,然后该脚本调用另一个可执行文件。问题是这个可执行文件需要很长时间才能运行,因此,它会导致cgi脚本停止直到完成。我正试图找到一种在后台运行它的方法。我在linux机器上用python编写代码。我遇到的问题是当脚本结束时(父进程被终止),子进程也被init终止(根据linux规范)。我用Google搜索了一下,我遇到了这个帖子: 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'的延迟,我肯定意味着错误(因为我没有看到正确的输出) 我尝试了一些其他方法,但它要么运行脚本并需要一段时间才能加载(意味着它在前台运行),或者它只是无法一起运行脚本。

想法?谢谢。 哦,顺便说一下,我正在使用python 2.6

1 个答案:

答案 0 :(得分:0)

解决方案是在脚本完成之前生成一些输出。至于我,最好的方法是使用chunked transfer encoding输出脚本执行日志。

通常,在输出开始之前,需要完全生成CGI脚本输出。这是计算“Content-Length”标题所必需的。分块传输编码可以解决这个问题 - 您不需要知道对输出块的整体响应。