Использование Python в качестве CGI-скрипта без модуля CGI? - PullRequest
2 голосов
/ 21 апреля 2010

Можно ли использовать Python в качестве CGI без использования модуля CGI и при этом получить доступ ко всей информации браузера и ко всему прочему?

Я пытался:

#!/usr/bin/python
import sys
print "Content-type: text/html"
print
data = sys.stdin.readlines()
print len(data)

но всегда печатает 0.

Ответы [ 2 ]

3 голосов
/ 21 апреля 2010

Это действительно возможно, но большая часть информации передается в виде переменных среды, а не на стандартный ввод. Фактически, единственное, что передается при стандартном вводе, - это тело входящего запроса, который будет иметь содержимое, только если форма будет отправлена.

Для получения дополнительной информации о том, как работать с CGI, посетите веб-сайт, например http://www.w3.org/CGI/. (слишком много, чтобы объяснить весь стандарт в ответе здесь)

1 голос
/ 21 апреля 2010

Конечно. cgi - служебный модуль без магических способностей; он ничего не делает самостоятельно, читая и обрабатывая переменные окружения (в частности, QUERY_STRING) и stdin, которые вступают в игру для POST тел форм. (Но не забудьте прочитать переменную окружения CONTENT_LENGTH и прочитать только столько байтов, чем использовать readlines(), иначе вы можете заставить свой скрипт зависать в ожидании большего ввода, который никогда не поступит.)

Действительно, есть cgi полные альтернативы для обработки отправки формы, как в виде отдельных модулей, так и в составе каркаса.

cgi модуля или нет, однако я бы не писал сегодня чисто веб-приложение на основе CGI. Намного лучше писать в интерфейс WSGI и использовать wsgiref.handlers.CGIHandler для развертывания этого приложения WSGI поверх CGI. Тогда вы сможете легко перейти на более эффективный интерфейс веб-сервера, когда и вам это нужно. Вы можете использовать модуль cgi внутри приложения WSGI для чтения отправленных форм, если хотите, или, опять же, делать свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...