2

我有一个 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代码的危险吗?[/编辑]

4

1 回答 1

1

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

于 2010-04-19T15:55:29.773 回答