我正在尝试在配置我的服务器后运行一个简单的cgi脚本。
我的脚本如下所示:
print "Content-type: text/html"
print
print "<html><head><title>CGI</title></head>"
print "<body>"
print "hello cgi"
print "</body>"
print "</html>"
当我转到我的脚本网址http://127.0.0.1/~flybywire/cgi-bin/main.py
时,我得到了:
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
在error.log
我得到以下内容:
[error] (8)Exec format error: exec of '/home/flybywire/www/cgi-bin/main.py' failed
[error] [client 127.0.0.1] Premature end of script headers: main.py
其他信息: Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80
答案 0 :(得分:22)
您可能需要在脚本顶部使用#!/usr/bin/python
来告诉Apache使用Python来执行它。至少,我这样做了,它对我有用:-)。
答案 1 :(得分:10)
此外,使用Unix行结尾保存文件(如果这是Linux服务器)。您确实使用chmod +x
使其可执行,不是吗?
如果您在各种环境中运行(#!/usr/bin/env python
部分),您可以使用env
来涵盖当前正在运行的Python版本。
答案 2 :(得分:1)
把
#!/usr/bin/env python
脚本顶部的工作正常。我把它放在首位,但是Netbeans在页面顶部放置了额外的代码(导入命令),这让我疯狂:(
答案 3 :(得分:0)
看起来Apache在执行它时遇到了麻烦。通常,对于unix脚本,您还需要在脚本的顶部指定解释器。
尝试将此添加到顶部:
#!/usr/bin/python
答案 4 :(得分:0)
也许你的问题是新的python版本需要括号()。
所以你的:
print "<body>"
现在应该是:
print ("<body>")
答案 5 :(得分:0)
删除程序中的第二行(打印) 我在我的apache服务器上尝试了它(mac os x)它运行正常。 不要忘记chmod 755并重启sudo apachectl restart 这是for python 2.7
print "Content-type: text/html"
print "<html><head><title>CGI</title></head>"
print "<body>"
print "hello cgi"
print "</body>"
print "</html>"
答案 6 :(得分:0)
Apache 不知道在您的 PC 上哪里可以找到 python 来执行该文件。 尝试将 #!C:/python 添加为 .py 文件的第一行(或 PC 上安装 Python 的任何位置)。
答案 7 :(得分:0)
如果是python 3,你可以在程序顶部添加#!/usr/bin/python3
而不是#!/usr/bin/python
。
(因为我是法国人,我觉得我的英语不完全正确)