【发布时间】:2015-09-17 11:13:39
【问题描述】:
每当我通过提交表单来调用下面的 cgi 脚本时,我都会收到内部服务器错误,并且服务器日志显示以下行: 脚本头过早结束:LoopFinderRetrieval.cgi,referer:http://loopfinder-prod-01.uit.tufts.edu/LoopFinderRetrieval.html
简而言之,cgi 文件的目的是转到提交时给出的运行 ID 指示的文件夹,打开并读取名为 JobStatus.txt 的文件,然后根据结果执行操作。这可以是向用户返回一个特定的错误,或者给他们他们的结果。据我了解,如果我是这样的话,我看到的错误将是由以下原因引起的,例如省略该行:
"Content-type:text/html\r\n\r\n"
但是该行存在,并且在同一服务器上使用完全相同的 PrintHeader() 和 PrintFooter() 函数的另一个 CGI 脚本正在运行而没有错误。任何人都可以看到任何可能导致这种情况的明显错误吗?如果不是,我读到的内容表明这可能是权限问题。在这种情况下,我将不得不联系管理员并修复它,但我不想这样做,除非我知道这是问题所在。谢谢。
#!/usr/bin/python2.6
# Import modules for CGI handling
import cgi, cgitb
import os
cgitb.enable()
#Functions to automatically print HTML headers and footers.
def PrintHeader():
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>LoopFinder Running</title>"
print "</head>"
print "<body>"
def PrintFooter():
print "</body>"
print "</html>"
# Create instance of FieldStorage
form = cgi.FieldStorage()
ID_Number = form.getvalue('IDNum')
with open('/loopfinder_data/RunData/%s/JobStatus.txt' % ID_Number, 'r') as pre_textfile:
textfile = pre_textfile.read()
if textfile[0] == 'Running':
PrintHeader()
print '<h2>Your run is not complete. Please check back later.</h2>'
PrintFooter()
if textfile[0] == 'Stopped':
PDBID = textfile[3]
if textfile[1] == 'PDBError':
PrintHeader()
print '<h2>We were unable to download the PBDID you entered, which was %s</h2>' % PDBID
print '<h2>Please check that this PDBID exists before trying again.</h2>'
PrintFooter()
elif textfile[1] == 'ChainCountError':
PrintHeader()
print '<h2>We were unable to either download or open the PBDID you entered, which was %s</h2>' % PDBID
print '<h2>Please check that this PDBID exists before trying again.</h2>'
PrintFooter()
elif textfile[1] == 'SingleChainError':
PrintHeader()
print '<h2>It appears that your PDB structure of interest contains only one chain.</h2>'
print '<h2>LoopFinder requires a multi-chain interface from which to calculate energy values.</h2>'
PrintFooter()
elif textfile[1] == 'LoopFinderError':
PrintHeader()
print '<h2>LoopFinder experienced an unknown error while analyzing your PDB file.</h2>'
print '<h2>Leave a comment including your run ID and we will try to solve this issue.</h2>'
PrintFooter()
elif textfile[1] == 'PyRosettaError':
PrintHeader()
print '<h2>PyRosetta experienced an unknown error while analyzing your PDB file.</h2>'
print '<h2>Leave a comment including your run ID and we will try to solve this issue.</h2>'
PrintFooter()
if textfile[0] == 'Completed':
PrintHeader()
print '<a href="http://<url_redacted>/loopfinder_data/RunData/%s/results/%s_Results.zip">\
Click here to download your results.</a>' % (ID_Number,ID_Number)
PrintFooter()
【问题讨论】:
-
你最终弄明白了吗? :)
-
不怕。我已经向服务器的根级管理员提交了支持票(它由我的大学托管,我只是一个 httpd 管理员)。当/如果我知道原因是什么,我打算回来说出来,以帮助未来的谷歌人,但现在我仍然在徘徊。
标签: python web cgi python-2.6