Всякий раз, когда я вызываю приведенный ниже сценарий cgi, отправляя ему форму, я получаю внутреннюю ошибку сервера, а в журнале сервера отображается строка: Преждевременное завершение заголовков сценария: LoopFinderRetrieval.cgi, referer: http://loopfinder-prod-01.uit.tufts.edu/LoopFinderRetrieval.html
Короче говоря, файл cgi предназначен для перехода в папку, обозначенную идентификатором запуска, указанным во время отправки, открытия и чтения файла с именем JobStatus.txt, а затем выполнения действия на основе результата. Это может либо возвращать пользователю конкретную ошибку, либо давать им результаты. Насколько я понимаю, ошибка, которую я вижу, была бы вызвана, если бы я, например, пропустил строку:
"Content-type:text/html\r\n\r\n"
но строка присутствует, и другой сценарий CGI, использующий те же самые функции PrintHeader () и PrintFooter () на том же сервере, выполняется без ошибок. Кто-нибудь может увидеть какие-либо явные ошибки, которые могут быть причиной этого? Если нет, то то, что я прочитал, указывает на то, что это может быть проблема с разрешениями. В этом случае мне придется связаться с администраторами и исправить это, но я не хочу этого делать, если я не знаю, в чем проблема. Спасибо.
#!/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()