Сводка: Сценарий Python cgi запускается, как и ожидалось, при вызове с простого сервера отладки python, но завершается с ошибкой 500 Premature end of script headers
при запуске из ~/public_html/cgi-bin/
Проблемы
Мой CGI-скрипт отлично работает при запуске через простой веб-сервер python, и я вижу правильный вывод при переходе к nameofmyhost.com:8080/...
Однако при запуске того же скрипта из моего каталога public_html/cgi-bin
выдается ошибка 500 premature end of script headers
. Что я могу сделать, чтобы это исправить?
Права доступа к файлу выглядят нормально:
drwxrwxrwx cgi-bin
-rwxr-xr-x cgi-bin/generate_list.py
Это simple_httpd.py, простой веб-сервер python
from http.server import HTTPServer, CGIHTTPRequestHandler
port = 8080
httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
print("Starting simple_httpd on port: " + str(httpd.server_port))
httpd.serve_forever()
CGI-скрипт generate_list.py:
#! /usr/local/bin/python3
import athletemodel
import yate
import glob
data_files = glob.glob("data/*.txt")
athletes = athletemodel.put_to_store(data_files)
print(yate.start_response())
print(yate.include_header("Coach Kelly's List of Athletes"))
print(yate.start_form("generate_timing_data.py"))
print(yate.para("Select an athlete from the list to work with:"))
for each_athlete in athletes:
print(yate.radio_button("which_athlete", athletes[each_athlete].name))
print (yate.end_form("Select"))
print(yate.include_footer({"Home": "/index.html"}))
Полагаю, мне нужно где-то явно указать мой каталог, может быть?
PS: я изучаю книгу "Head First Python" Орейли
Шаги отладки
Убедитесь, что сервер может найти мои файлы
Сервер находит простой html-файл в public_home [OK]
Убедитесь, что скрипт CGI может выполняться без ошибок.
Content-type: text/html
<html>
<head>
<title>Coach Kelly's List of Athletes</title>
[...]
CGI-скрипт запускается из командной строки - выводит как положено [OK]
Убедитесь, что сервер может выполнить простой скрипт CGI в том же месте
Попробуйте простой CGI-скрипт, чтобы увидеть, способен ли сервер выполнить какие-либо CGI-скрипты на всех :
#!/usr/local/bin/python3
print("Content-Type; text/html")
print("")
print("<html><body><h1>hello</h1></body></html>")
Сервер не может выполнить простой CGI-скрипт, выдавая ту же ошибку [FAIL]
Исправления
Fix 1: Измените путь данных на абсолютный вместо относительного:
- data_files = glob.glob("data/*.txt")
+ data_files = glob.glob("/home/delliott/public_html/webapp/data/*.txt")