使用Python作为没有CGI模块的CGI脚本?

时间:2010-04-21 03:31:05

标签: python cgi

是否可以在不使用CGI模块的情况下将Python用作CGI,并且仍然可以访问所有浏览器信息和所有内容?

我试过了:

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

但它总是打印0。

2 个答案:

答案 0 :(得分:3)

确实可以,但很多信息是作为环境变量传递的,而不是标准输入。实际上,传入标准输入的唯一内容是传入请求的主体,如果表单正在被POST,则只有内容。

有关如何使用CGI的更多信息,请查看http://www.w3.org/CGI/等网站。 (在这里的答案中解释整个标准太过分了)

答案 1 :(得分:1)

不确定。 cgi是一个没有神奇力量的实用模块;它通过阅读和处理环境变量(特别是QUERY_STRING)和stdin来完成任何你无法做到的事情,这些变量对POST表单体起作用。 (但是请记住阅读CONTENT_LENGTH环境变量并且只读取那么多字节,而不是使用readlines(),否则你可以让你的脚本等待更多永远不会来的输入。)

实际上,cgi有完整的表单提交处理替代方案,可以作为独立模块,也可以作为框架的一部分。

cgi模块或不,但是,我今天不会写一个纯粹的基于CGI的webapp。写入WSGI接口要好得多,并使用wsgiref.handlers.CGIHandler通过CGI部署该WSGI应用程序。然后,您可以根据需要轻松迁移到更高效的Web服务器界面。您可以使用WSGI应用程序中的cgi模块来阅读表单提交,如果您愿意,或者再次执行您自己的工作。