我想我犯了一些愚蠢的错误,但我找不到它。试图在 apache 网络服务器上运行一个简单的 python cgi 脚本。我的代码是
#/usr/bin/env python
import cgitb
import cgi
cgitb.enable()
print 'Content-Type: text/html'
print
print '<html>'
print '<head><title>My first Python CGI app</title></head>'
print ' <body>'
print ' <p>something to try<p>'
print ' </body>'
print '</html>'
Run Code Online (Sandbox Code Playgroud)
这段代码在 /usr/lib/cgi-bin 我试图通过 localhost/cgi-bin/test.py 运行它,但它显示500 INTERNAL SERVER ERROR。我尝试更改其权限,但什么也没发生。我能够从 /var/www/html/file_name.html 运行 html 文件所以我尝试在 www/ 和 www/html/(两者中)移动它并制作 cgi-bin 文件夹,没有它,没有解决。
我在 apache2.conf 中添加了这个
<Directory /usr/lib/cgi-bin>
Options +ExecCGI
AddHandler cgi-script .cgi .py
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
和 var/log/apache2/error.log 说
[Tue Jan 13 22:54:11.422641 2015] [cgid:error] [pid 10157:tid 140434248509184] [client 127.0.0.1:44941] 标题前的测试脚本输出结束.py
[Wed Jan 14 00:20:24.434351 2015] [cgid:error] [pid 26512:tid 140434573543296 (8)Exec 格式错误:AH01241:'/usr/lib/cgi-bin/test 的执行失败
[Wed Jan 14 00:20:24.434778 2015] [cgid:error] [pid 10158:tid 140434456491776] [client 127.0.0.1:45974] 标题前的脚本输出结束:test.py
当您遇到 500 个错误时,一个提示是在命令行上运行脚本,这通常会告诉您拼写错误或其他解释器级别的问题。查看日志也可以报告相同的错误,但通常通过直接运行脚本更容易查看发生了什么。
具体来说,至少有一个问题是这一行中的错字:
#/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
应该是:
#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
线索是bash
,当您希望它通过环境的python
解释器运行时,按原样运行脚本会显示否则会通过解释器显示的错误。