python CGI 失败,在 perl 中成功

python CGI failure, succeeding in perl

我正在尝试在我的服务器上使用 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 选项可以绕过那种问题。

有趣的是,我尝试使用主机提供商帮助页面上提供的 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";

它运行s...

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


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

可能是系统默认的Python是Python3,而不是Python2,这种情况下,print语句会使脚本因语法错误而失败。

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

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

(顺便说一句,CGI 的行结尾应该没问题 - 检查 )

另一个可能的问题是您的网络服务器未配置为 运行 .py 文件作为 CGI 程序 - 检查其配置。

此外,这个程序应该可以在终端上运行,因为它是 - 尝试从终端 运行 它,看看它是否打印出所需的输出 - 如果没有,请检查错误消息并改正。您可能在那里有语法错误,可能是由于 "print" 问题,也可能是缩进不正确,或者我们在代码段中看不到的其他内容。

最后似乎我有 Windows 风格的行尾......虽然我不明白这是怎么发生的,因为文件从未通过 Windows OS.