2012-05-19 5 views
4

Я использую hostgator, и они клянутся, что поддерживается python, но я еще не видел один рабочий сценарий python. Я попробовал несколько сценариев, моя последняя из них является тот, который они дают на их сайте:Базовый сценарий python, дающий внутреннюю ошибку сервера

#!/usr/bin/python 
print "Content-type: text/html\n\n"; 
print "<html><head>"; 
print "<title>CGI Test</title>"; 
print "</head><body>"; 
print "<p>Test page using Python</p>"; 
print "</body></html>"; 

Я получаю Внутренняя ошибка сервера: http://elkuzu.com/cgi-bin/test.py

Файл имеет 755 разрешений, так что делает папка cgi-bin. Они отказались помочь мне с тем, что они называют «кодированием» проблем ... но со всем тем, что я пробовал и не получал ничего, кроме ошибок внутреннего сервера, я думаю, что проблема с ними. Кто-нибудь знает, что может быть неправильно?

Журналы ошибок:

[Sat May 19 09:11:38 2012] [error] [client 74.129.48.242] File does not exist: /home/elkuzu/public_html/404.shtml 
[Sat May 19 09:11:38 2012] [error] [client 74.129.48.242] File does not exist: /home/elkuzu/public_html/favicon.ico 
[Sat May 19 09:11:37 2012] [error] [client 74.129.48.242] File does not exist: /home/elkuzu/public_html/500.shtml 

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

+0

Что говорят журналы? –

+0

Я не мог найти журналы, где я могу их увидеть? Cpanel? – Samir

+0

Да, cpanel искать журналы ошибок Apache. –

ответ

7

Существует documentation о том, как использовать Python как CGI.

В вашем случае речь шла о завершении линии. Это скрытый персонаж в конце каждой строки.

On a Unix-like system, The line endings in the program file must be Unix style line endings. This is important because the web server checks the first line of the script (called shebang) and tries to run the program specified there. It gets easily confused by Windows line endings (Carriage Return & Line Feed, also called CRLF), so you have to convert the file to Unix line endings (only Line Feed, LF). This can be done automatically by uploading the file via FTP in text mode instead of binary mode, but the preferred way is just telling your editor to save the files with Unix line endings. Most editors support this.

В Windows (т.е. Notepad) они представлены как (CR LF или \r\n), в то время как на UNIX они (LF или \n).

Notepad++ В, вы можете просматривать окончания строк в виде символов, как так: View -> Show Symbol -> Показать Конец строки

Замены окон переносов строк с теми Unix, вы можете использовать: Поиск -> Заменить .. .

В диалоге замены найдите \r\n и замените их на \n. Убедитесь, что выбран режим расширенного поиска.

Notepad++ replace dialogue screenshot


В качестве альтернативы, вы можете использовать Edit -> EOL Conversion -> UNIX Формат

Notepad++ EOL Conversion screenshot

+0

Я попробовал .htaccess, и это, казалось, просто позволило мне запустить .py из корневой папки, но он все еще обнаружил ошибку внутреннего сервера. Я попытался добавить дополнительный ввод в нижней части сценария test.py, но ничего не изменилось. – Samir

+0

@Tyler Я обновил свой ответ - можете ли вы попробовать этот скрипт? Он расскажет вам версию python. Вам не нужны никакие точки с запятой –

+0

Ошибка внутреннего внутреннего сервера и такая же ошибка в журналах ошибок: http://elkuzu.com/cgi-bin/python3.py – Samir

0

Я знаю, что это старый вопрос, но я бегу в 500 ошибок с хозяином, а также (указать, что я бросил попытку год назад). Несколько дней назад решил попробовать еще раз после их «tutorial», и он снова не сработал.

Я пытаюсь что-то проще:

#!/usr/bin/python 
import sys 
print sys.version_info 

я получил ошибку 500 раз, однако после беседы с поддержкой они дали сообщение журнала говоря:

[error] [client 192.x.x.x] malformed header from script. Bad header=(2, 6, 6, 'final', 0): test1.py

С этой информацией (лог сообщения, содержащегося питон, так что он каким-то образом выполнялся). Я нашел этот пост в Unix site, где получил это:

As the HTTP spec (and the error message from your HTTP server) specify, you need one blank line between the HTTP headers and the body, otherwise the server doesn't know where the headers end and the body begins.

Я изменил мой сценарий:

#!/usr/bin/python 
print "" 
import sys 
print sys.version_info 

И это сработало !. Как ни странно, после выполнения этого сценария успешно, к примеру, в учебнике (код ниже) теперь работает для меня, как хорошо

#!/usr/bin/python 
print "Content-type: text/html\n\n"; 
print "<html><head>"; 
print "<title>CGI Test</title>"; 
print "</head><body>"; 
print "<p>Test page using Python</p>"; 
print "</body></html>"; 

Почему это работает сейчас? У меня нет подсказки, но, по крайней мере, я надеюсь, что этот ответ поможет кому-то, кто имеет дело с поддержкой хозяина (отсутствием).

Смежные вопросы