python CGI失败,在perl中取得成功

时间:2015-01-22 17:26:39

标签: python cgi

我正在尝试在我的服务器上使用python CGI脚本。下面显示的python和perl脚本都在同一目录中,具有权限755。

如果我尝试使用此代码的python hello world,并将浏览器指向它:

#!/usr/bin/env python

import cgi
import cgitb
cgitb.enable()

print "Content-type:text/html\r\n\r\n"
print "Hello, World!"

它失败了:Error 500: Premature end of script headers: cgiwrap

我认为我有cgiwrap权限问题,因为我的服务器是apache,而且我读到perl中的-w选项可以绕过这类问题。 < / p>

有趣的是,我尝试使用主机提供程序帮助页面上提供的perl Hello World(在运行时失败):

#!/usr/bin/perl

print "Content-type: text/html\r\n\r\n";
print "Hello World";

它失败了:CGIWrap Error: Script Execution Failed, Error Message: No such file or directory

如果我尝试执行(只更改shebang):

#!/usr/bin/perl -wT

print "Content-type: text/html\r\n\r\n";
print "Hello World";

它运行...

此外,终端中的命令python index.py按预期运行,而./index.py则失败并显示No such file or directory


which python命令输出:/usr/bin/python

2 个答案:

答案 0 :(得分:1)

可能是系统中的默认Python是Python 3,而不是Python 2.在这种情况下,print语句会使脚本失败并出现语法错误。

你能检查一下wbe服务器的日志吗?也许有一个回溯详细说明出了什么问题。

无论如何,为了安全起见,请放在脚本的第二行 from __future__ import print_function,并在打印后的字符串周围添加括号。

(顺便说一下,CGI的行结尾应该没问题 - 检查HTTP header line break style

另一个可能的问题是您的Web服务器未配置为以CGI程序的形式运行.py文件 - 请检查其配置。

此外,该程序应该从终端工作 - 尝试从终端运行它,并查看它是否打印出所需的输出 - 如果没有,检查错误消息并更正它。您可能会出现语法错误,可能是由于“打印”问题,也可能是错误的缩进,或者我们在代码段中看不到的其他内容。

答案 1 :(得分:0)

最后似乎我有Windows风格的行尾...虽然我不明白这是怎么回事,因为文件从未通过Windows操作系统传播过。