之前已经问过这个确切的问题但是我的智慧结束了!我花了4个小时试图让SIMPLE Python CGI脚本在Windows XP上运行,但是我收到了错误。请保存我的理智!
Python脚本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 \ alerter
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工作了一段时间没有问题。
有什么想法吗?感谢!!!
答案 0 :(得分:4)
您的错误是:
脚本标题的提前结束
请注意,HTTP协议指定HTTP响应的正文与空白行的标题分隔(即回车和换行的两倍)。我会去做类似的事情:
import sys
sys.stdout.write("Content-type: text/html\r\n\r\n<p>Body</p>")
答案 1 :(得分:1)
看来如果我使用括号'print'方法就可以了。
#!C:/Python30/python.exe -u
print("Content-type: text/html\n\n<p>Body</p>")
研究性。
好的,答案很明显。 Python 3.0使'print'成为一个函数,需要括号!当我从命令行运行脚本时,它会产生相同的语法错误。
我实际上已经多次从命令行进行DID测试并打印出来。但是,那时我实际上使用的是cygwin的2.5.1版本。在调试过程中,我将Python 3.0添加到我的路径中,因此从那时起我就从3.0版本运行脚本,直到现在再没有从命令行测试。
呼!问题解决了。这是一个非常耗时的问题。
我很感激输入。它帮助我找到了解决方案!
答案 2 :(得分:0)
更改
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容忍“缺失 - '\ r''问题所以这也适用于Unix-y平台,我不是100%肯定的。)