内部服务器错误,非常简单的python脚本

时间:2013-11-19 19:14:59

标签: python macos apache cgi

我是python的新手,我正在尝试运行一个简单的脚本(在Mac上,如果这很重要的话)。

现在,这段代码给了我内部服务器错误:

#!/usr/bin/python

print 'hi'

但是这个就像一个魅力(只有额外的'打印'命令):

#!/usr/bin/python
print

print 'hi'

任何解释?谢谢!

更新

当我从终端运行这个脚本时,一切都很好。但是当我从浏览器运行它时:

http://localhost/cgi-bin/test.py

我收到此错误(再次,只有在我没有添加额外的打印命令时)。 我当然使用Apache服务器。

1 个答案:

答案 0 :(得分:6)

看起来您正在将脚本作为CGI脚本运行(您的编辑确认您正在使用CGI)

...并且需要首字母(空)print来表示标题的结尾。

检查Apache的错误日志(可能是/var/log/apache2/error.log),看它是否显示“脚本标题的过早结束”(more info here)。

编辑:更多解释:

Apache中的CGI脚本负责生成自己的HTTP响应。

HTTP响应由标题块,空行和所谓的 body 内容组成。即使您应该生成一些标头,也不是必须这样做。但是,您确实需要输出空行; Apache希望它存在,如果不存在(或者如果你只输出一个无法解析为标题的主体),Apache将产生错误。

这就是为什么你的第一个版本没有用,但你的第二个版本没有用:添加空print添加了Apache所期望的所需空行。

这也有效:

#!/usr/bin/env python

print "Content-Type: text/html"  # header block
print "Vary: *"                  # also part of the header block
print "X-Test: hello world"      # this too is a header, but a made-up one
print                            # empty line
print "hi"                       # body