配置Apache使用Python类似于CGI PHP

0 投票
4 回答
14971 浏览
提问于 2025-04-15 11:18

我觉得在Apache网页服务器上添加PHP的常见方法是这样配置的:

ScriptAlias /php5.3 /usr/local/php5.3/bin
Action application/php5.3 /php5.3/php-cgi
AddType application/php5.3 .php

现在我试着为Python写一个类似的配置:

ScriptAlias /python /usr/bin
Action application/python /python/python
AddType application/python .py

我有一个小测试脚本,内容是这样的:

print "Content-Type: text/html\n\n"
print "Test"

但是似乎出现了问题,因为Apache的错误日志显示了以下内容:

Premature end of script headers: python

所以我首先想到的是我的Python响应不对。但是里面有Content-Type,还有换行符。而且用php-cgi调用的一个类似的PHP脚本输出的结果完全一样。

另外,我也没有找到任何教程能教我如何让Python以这种方式工作。所以也许这是不可能的,但我很好奇为什么会这样?或者我是不是漏掉了什么?

4 个回答

1

错误信息“脚本头部提前结束”可能是因为你的.py文件是在一个Windows程序中编辑的,而这个程序使用的是CRLF作为换行符,而不是Unix系统的LF。

一些程序,比如Dreamweaver,有设置可以选择换行符的类型。而记事本也是使用CRLF。

如果你的主机有文件编辑器,你可以尝试删除当前的换行符,然后通过那个编辑器重新输入,这样就能把CRLF换成LF了。记事本++可以只使用LF。

13

你可以使用任何类型的可执行文件作为cgi。你遇到的问题是在你的apache配置上,看起来你可能是随便写的。查一下apache的文档,了解更多细节,不过你不需要使用Action和AddType。

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

然后把下面的内容放到你的cgi-bin文件夹里:

#!/usr/bin/python
# test.py
print "Content-Type: text/html\n\n"
print "Test"

确保它是可执行的,然后在/cgi-bin/test.py查看结果。

5

“所以也许这不可能,但我很好奇为什么会这样?”

没错,这确实不可能。而且这从来就不是它的设计初衷。

原因一 - Python和PHP不一样。PHP本身就是为了当一个CGI(通用网关接口)而设计的,而Python则不是。

原因二 - Python本身并不是一个CGI。它是一个解释器,几乎没有对环境的要求。

原因三 - Python从来没有被设计成CGI。这就是为什么Python通常会嵌入到一些小的包装器中(比如mod_python、mod_wsgi、mod_fastcgi),这些包装器可以把CGI环境封装成对运行中的Python程序更有意义的形式。

撰写回答