Python CGI脚本错误的过早结束取决于脚本参数

时间:2010-04-19 14:35:22

标签: python cgi openbabel

我有一个python脚本,它应解析文件并生成一些输出到磁盘,以及返回链接到输出文件的网页。当使用从HTML表单发布的文件运行时,我没有返回HTML输出,只有500错误页面,error_log包含该行:

[Mon Apr 19 15:03:23 2010] [error] [client xxx.xxx.121.79]脚本标题的提前结束:uploadcml.py,referer:http://xxx.ch.cam.ac.uk:9000/

但是,脚本应该保存的文件确实保存到磁盘。

如果我在没有任何参数的情况下运行它,脚本将返回正确的HTML,表明没有解析文件。

我在网上发现的有关脚本标题过早结束的所有信息都表明它是由于缺少标题,或者缺少python脚本的权限,但两者都不适用于我。

脚本的第一行是:

#!/home/nwe23/bin/bin/python
import cgitb; cgitb.enable()
import cgi
import pybel,openbabel
import random
print "Content-Type: text/html"
print

因此在运行时,我看不出它无法输出标题,并且在运行时输出标题而没有要解析的文件,但是当给定文件时会产生错误(但仍然解析文件和将输出保存到磁盘!)。

有谁知道这是怎么回事以及如何解决这个问题?

我尝试在文件的各个位置添加错误的缩进乱码(例如foobar),这导致在error_log中添加缩进错误,即使它是脚本中的最后一行。但是,过早的脚本标题错误仍然存​​在。这是否意味着脚本一直在执行?

[编辑] 我现在设法让它工作,似乎通过SWIG调用外部C ++库失败了,但是没有产生有用的错误消息。我已经解决了这个问题,现在脚本运行正常。

令人惊讶的是,当某些远程库调用失败时,error_log中唯一的错误是关于脚本头。我想这是调用非python代码的危险吗? [/编辑]

1 个答案:

答案 0 :(得分:1)

当C库出现分段错误或以其他方式退出时,stdout缓冲区可能无法刷新。使用Python解释器的-u选项或手动刷新它应解决“脚本标题的过早结束”,但它对实际问题没有帮助。