在Windows XP上运行Python CGI脚本

时间:2010-09-22 00:21:02

标签: python windows-xp cgi

之前已经问过这个确切的问题但是我的智慧结束了!我花了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工作了一段时间没有问题。

有什么想法吗?感谢!!!

3 个答案:

答案 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%肯定的。)