2009-09-23 91 views
7

我想配置我的服务器后运行一个简单的CGI脚本。简单的CGI脚本内部服务器错误(500)

我的剧本是这样的:

print "Content-type: text/html" 
print 
print "<html><head><title>CGI</title></head>" 
print "<body>" 
print "hello cgi" 
print "</body>" 
print "</html>" 

当我去我的脚本URL 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

回答

21

您可能需要一个#!/usr/bin/python在你的脚本的顶部告知Apache使用Python执行它。至少,我这样做,它对我有用:-)。

+0

谢谢你,它的工作原理。 – flybywire

+0

我想给所有的cgi脚本添加'#!/ usr/bin/python'是很可怕的。如何通过apache SetEnv设置PYTHONPATH? – gonjay

0

看起来Apache很难执行它。通常,对于unix脚本,您还需要在脚本的顶部指定解释器。

尝试增加这个要顶:

#!/usr/bin/python 
9

另外,保存文件(如果这是一个Linux服务器)Unix行结尾。你确实使用chmod +x来执行它,不是吗?

如果您在各种环境中运行(因此env部分),您可以使用#!/usr/bin/env python覆盖当前运行的Python版本。

+0

当我在没有'chmod + x'的情况下尝试时,出现了另一个错误:'(13)权限被拒绝:'/home/flybywire/www/cgi-bin/main.py'的失败'失败。 –

+1

这仅仅是因为chmod + x使得文件权限可执行 - 使得文件可执行是真正的先决条件。 –

1

#!/usr/bin/env python 

在脚本的顶部工作正常。我把它放在上面,但Netbeans的是在页面的顶部这让我抓狂:(

0

也许你的问题是,新的Python版本需要括号()把额外的代码(输入命令)本身。

所以你:

print "<body>" 

现在应该是:

print ("<body>") 
+0

他们正在使用Python2而不是Python3。 –

0

删除二号线在你的程序(打印) 我尝试了我的Apache服务器上(MAC操作系统x)它工作正常。 不要忘记命令chmod 755和使用sudo重启的apachectl重新启动 这是蟒蛇2.7

print "Content-type: text/html" 
print "<html><head><title>CGI</title></head>" 
print "<body>" 
print "hello cgi" 
print "</body>" 
print "</html>"