Невозможно запустить сценарии Python CGI, используя CGIHTTPRequestHandler в Python 3.3
Я нуб; пытаясь создать и использовать простой веб-сервер в Python, который выполняет скрипты CGI, написанные на Python. Я использую Windows XP и Python v3.3.0. У меня есть каталог "myserver", который содержит "myserver.py", "sample.html" и каталог "cgi-bin", который в свою очередь содержит "cgi_demo.py"
myserver.py
from http.server import HTTPServer
from http.server import CGIHTTPRequestHandler
port = 8080
host = '127.0.0.1'
server_address = (host,port)
httpd = HTTPServer(server_address,CGIHTTPRequestHandler)
print("Starting my web server on port "+str(port))
httpd.serve_forever()
cgi_demo.py
import cgi
import cgitb; cgitb.enable()
print("Content-type: text/html")
print
print("<html><body>")
for i in range(0,100):
print(i,"<br>")
print("</body></html>")
Теперь список каталогов работает нормально для "myserver", но не для "cgi-bin"; может быть, именно так оно и закодировано - у меня здесь нет проблем. "sample.html" тоже получается нормально. Однако выполнение "cgi_demo.py" не является правильным. Я получаю пустую страницу в браузере; и окно консоли (которое тоже пустое) появляется и исчезает. Более того, на консоли сервера я получаю сообщение
127.0.0.1 - - [29/Nov/2012 12:00:31] "GET /cgi-bin/cgi_demo.py HTTP/1.1" 200 -
127.0.0.1 - - [29/Nov/2012 12:00:31] command: C:\Python33\python.exe -u "D:\python apps\my web server\cgi-bin\cgi_demo.py" ""
127.0.0.1 - - [29/Nov/2012 12:00:32] CGI script exited OK
Пожалуйста, скажите мне, что не так! У меня такое ощущение, что поток вывода моего скрипта не подключен к серверу. Что я делаю неправильно? Не говорите, что я должен расширить CGIHTTPRequestHandler!!
1 ответ
Извините за беспокойство!
Ну, это моя вина. 2 вещи на заметку:
[1] Окно консоли, которое появилось и исчезло; это происходит только тогда, когда я использую IDLE для запуска сервера. Если скрипт уже запущен в нормальной консоли Windows, то этого не происходит. Мое чувство было НЕПРАВИЛЬНО.
[2] В моем скрипте cgi есть ошибка / ошибка. После печати заголовка HTTP; оператор print, который я написал, был просто "print", а не "print()". Это так неловко! Но даже тогда почему переводчик не уловил эту ошибку?