【问题标题】:python CGI failure, succeeding in perlpython CGI失败,在perl中成功
【发布时间】:2015-01-28 19:26:44
【问题描述】:

我正在尝试在我的服务器上使用 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";

它运行...

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


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

【问题讨论】:

  • 没有cgi经验,不知道你是否需要在渲染任何实际内容之前显式打印<html><body>标签。
  • 在“Content-type”之后打印空行时,您可能使用了错误类型的换行符。试试print "Content-type: text/html\r\n\r\n"
  • @BhargavRao 我试过了,是的。也许我做错了?我编辑以尝试您的所有建议。顺便说一句,感谢大家的帮助,你们真的很好!

标签: python cgi


【解决方案1】:

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

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

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

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

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

另外,这个程序应该在终端上运行,因为它是 - 尝试从终端上运行它,看看它是否打印出所需的输出 - 如果不是,检查错误消息并更正它。您可能在那里有语法错误,可能是由于“打印”问题,或者可能是不正确的缩进,或者其他我们在 sn-p 中看不到的东西。

【讨论】:

  • 感谢您的意见。我试过from __future__ import print_function。不幸的是,它不会改变结果。我查了一下,服务器确实处理了.py。在终端中运行时,它按预期输出,没有错误。这就是要我死的原因,因为这意味着找到了解释器并执行了脚本!
【解决方案2】:

似乎我终于有了 Windows 风格的行尾...虽然我不明白这是怎么发生的,因为这些文件从未通过 Windows 操作系统。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多