внутренняя ошибка сервера (500) в простом скрипте cgi

Я пытаюсь запустить простой скрипт cgi после настройки моего сервера.

мой скрипт выглядит так:

print "Content-type: text/html"
print
print "<html><head><title>CGI</title></head>"
print "<body>"
print "hello cgi"
print "</body>"
print "</html>"

когда я иду в мои скрипты url http://127.0.0.1/~flybywire/cgi-bin/main.py Я:

Внутренняя Ошибка Сервера

сервер обнаружил внутреннюю ошибку или неправильной настройки и не смог выполнить ваш запрос.

и error.log Я получаю следующий:

[error] (8)Exec format error: exec of '/home/flybywire/www/cgi-bin/main.py' failed [error] [client 127.0.0.1] Premature end of script headers: main.py

прочая информация: Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

6 ответов


вам понадобится #!/usr/bin/python в верхней части вашего скрипта, чтобы сказать Apache использовать Python для его выполнения. По крайней мере, я сделал это, и это сработало для меня :-) .


кроме того, сохраните файл (если это сервер Linux) с окончаниями строк Unix. Вы сделали его исполняемым с помощью chmod +x не так ли?

можно использовать #!/usr/bin/env python для покрытия текущей версии Python, если вы работаете в различных средах (отсюда env часть).


Putting

#!/usr/bin/env python

на верхней части скрипта работает нормально. Я положил его сверху, но Netbeans помещал дополнительный код (команды импорта) сам по себе в верхней части страницы, которая сводила меня с ума : (


похоже, что у Apache есть проблемы с его выполнением. Как правило, для сценария unix вам также нужно указать интерпретатор в верхней части сценария.

попробуйте добавить это:

#!/usr/bin/python

возможно, ваша проблема в том, что новая версия python нуждается в круглых скобках ( ).

Итак:

print "<body>"

теперь должно быть:

print ("<body>")

удалите 2-ю строку в вашей программе (печать) Я попробовал это на моем сервере apache (mac os x), он работает нормально. не забудьте chmod 755 и перезагрузитесь с перезапуском sudo apachectl Это для python 2.7

print "Content-type: text/html"
print "<html><head><title>CGI</title></head>"
print "<body>"
print "hello cgi"
print "</body>"
print "</html>"