Запустите Python CGI Script в Windows XP - PullRequest
1 голос
/ 22 сентября 2010

Этот точный вопрос был задан ранее, но я нахожусь в своем уме! Я потратил 4 часа, пытаясь заставить работать простой скрипт Python CGI для Windows XP, но получаю ошибки. Пожалуйста, сохраните мое здравомыслие!

Python Script register.py

#!c:/Python30/python.exe -u

print "Content-type: text/html" 
print "<P>Hello, World!</p>"

Сценарий находится в:
C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ cgi-bin \lerter

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

[Tue Sep 21 19:06:36 2010] [error] [client 127.0.0.1] Premature end of script headers: register.py
[Tue Sep 21 19:06:36 2010] [error] [client 127.0.0.1]   File "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/alerter/register.py", line 3\r
[Tue Sep 21 19:06:36 2010] [error] [client 127.0.0.1]     print "Content-type: text/html"\r
[Tue Sep 21 19:06:36 2010] [error] [client 127.0.0.1]                                   ^\r
[Tue Sep 21 19:06:36 2010] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r

httpd.conf:

LoadModule cgi_module modules/mod_cgi.so

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    Options +ExecCGI
    AddHandler cgi-script .py
</Directory>

Это должно быть ОЧЕНЬ просто. Да? Мне не хватает той ОДНОЙ вещи, которая заставит ее наконец работать. У меня некоторое время назад работал PHP без проблем.

Есть идеи? Спасибо !!!

Ответы [ 3 ]

4 голосов
/ 22 сентября 2010

Ваша ошибка:

Преждевременный конец заголовков сценария

Обратите внимание, что протокол HTTP указывает, что тело ответа HTTP отделено от его заголовковпустая строка (т.е. два раза возврат каретки и перевод строки).Я бы пошел на что-то вроде:

import sys
sys.stdout.write("Content-type: text/html\r\n\r\n<p>Body</p>")
1 голос
/ 22 сентября 2010

Похоже, что если я использую метод «print» в скобках, это сработает.

#!C:/Python30/python.exe -u
print("Content-type: text/html\n\n<p>Body</p>")

исследующий.

Хорошо, теперь ответ очевиден. Python 3.0 сделал «печать» функцией, требующей скобок! Когда я запускаю скрипт из командной строки, он выдает идентичную синтаксическую ошибку.

Я действительно проверял несколько раз из командной строки, и он печатался. Однако в тот момент я фактически использовал версию 2.5.1 от Cygwin. Во время отладки я добавил Python 3.0 в свой путь и, таким образом, с этого момента я запускал скрипт из версии 3.0, не проверяя снова из командной строки до сих пор.

Уф! Задача решена. Очень дорогостоящая проблема.

Я ценю вклад. Это помогло мне найти решение!

0 голосов
/ 22 сентября 2010

Изменение

print "Content-type: text/html" 
print "<P>Hello, World!</p>"

на

print "Content-type: text/html" 
print
print "<P>Hello, World!</p>"

т.е. просто вставка пустого print после того, как вы закончите с заголовками, должно работать нормально: вы указываетена Windows, поэтому каждый print будет вставлять обязательную для завершения завершающую последовательность \r\n (я полагаю, что Apache терпимо относится к проблеме «missing - '\ r'»), так что это также будет работать на платформах Unix-y.я не уверен на 100%).

...