将Apache配置为使用Python就像CGI PHP一样

oko*_*man 0 python apache cgi

我认为将一种常见的方法添加到Apache Web服务器是将它配置为:

ScriptAlias /php5.3 /usr/local/php5.3/bin
Action application/php5.3 /php5.3/php-cgi
AddType application/php5.3 .php
Run Code Online (Sandbox Code Playgroud)

现在我尝试为Python编写类似的配置:

ScriptAlias /python /usr/bin
Action application/python /python/python
AddType application/python .py
Run Code Online (Sandbox Code Playgroud)

我有一个小的测试脚本,如下所示:

print "Content-Type: text/html\n\n"
print "Test"
Run Code Online (Sandbox Code Playgroud)

但是,由于apache错误日志显示以下内容,因此似乎有些错误:

Premature end of script headers: python
Run Code Online (Sandbox Code Playgroud)

所以我的第一个问题是我的python响应不对.但是有Content-Type和两个换行符.此外,调用的类似PHP脚本的输出也提供php-cgi了完全相同的输出.

此外,我还没有找到一个教程,展示如何让python以这种方式工作.也许这是不可能的,但后来我很好奇为什么会这样呢?或者我错过了什么?

Jim*_*imB 13

您可以将任何类型的可执行文件用作cgi.您的问题出在您的apache配置中,看起来就像您刚刚编写的那样.查看apache文档以获取更多详细信息,但不需要Action和AddType.

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
Run Code Online (Sandbox Code Playgroud)

然后将以下内容放入cgi-bin:

#!/usr/bin/python
# test.py
print "Content-Type: text/html\n\n"
print "Test"
Run Code Online (Sandbox Code Playgroud)

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


S.L*_*ott 5

"所以也许这是不可能的,但后来我很好奇为什么会这样呢?"

正确.这是不可能的.它也从来没有打算过.

原因1 - Python不是PHP.PHP - 作为一个整体 - 期望成为CGI.Python没有.

原因2 - Python本质上不是CGI.这是一个(几乎)没有环境期望的翻译.

原因3 - Python从未被设计为CGI.这就是为什么Python通常嵌入到小包装器(mod_python,mod_wsgi,mod_fastcgi)中,它可以将CGI环境封装为对正在运行的Python程序更有意义的形式.