1

出于某种原因,我必须在我的 python cgi 脚本中使用分号。此外,它不识别 if 语句的常用语法。

例如,这有效:

#! /usr/bin/python

print "Content-type: text/html\n\n";
print "<html>Hello World!</html>";

但这不起作用:

#! /usr/bin/python

print "Content-type: text/html\n\n"
print "<html>Hello World!</html>"

这不起作用:

#! /usr/bin/python

print "Content-type: text/html\n\n";
if True:
    print "<html>Hello World!</html>";

我从最后两个示例中得到 500 个内部服务器错误。我的 apache 错误日志说文件中存在语法问题。我在 OSX 上在 Apache2 上运行它。任何帮助是极大的赞赏!

编辑:所以显然这不是作为 python 脚本处理的。我想我可能已经找到了问题,但我不确定如何解决它。在我的 httpd.conf 中,我在末尾附加了以下几行,我认为它们是问题所在:

<Location /cgi-bin>
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    Options ExecCGI
    PerlSendHeader On
    Order allow,deny
    Allow from all
</Location>

我有这些行是为了让我的 cgi-bin 中的一些其他 cgi 脚本与 mod_perl 一起运行。如果这需要更改,它应该是什么样子以便 perl cgi 文件仍将在 mod_perl 下运行,但 python cgi 文件将作为 python 运行?为了清楚起见或以防万一,我的 cgi-bin 中的 perl 文件具有 .cgi 文件扩展名,但我尝试使用的 python cgi 文件具有 .py 文件扩展名。

4

1 回答 1

0

您的 apache 配置被明确设置为在 cgi-bin 目录中运行Perl- 这是因为您的语法是“奇怪的” - 它仅在它是 perl 程序时才有效。

;以appen结尾的独立打印语句对Python 2.x 和perl 都有效。

http://httpd.apache.org/docs/2.2/howto/cgi.html,这就是使 CGI 正常工作所需的全部内容,而无需强制 perl 来处理它们:

<Directory /cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>
于 2012-08-08T02:43:48.943 回答