我是python的新手,我正在尝试运行一个简单的脚本(在Mac上,如果这很重要的话)。
现在,这段代码给了我内部服务器错误:
#!/usr/bin/python
print 'hi'
但是这个就像一个魅力(只有额外的'打印'命令):
#!/usr/bin/python
print
print 'hi'
任何解释?谢谢!
更新
当我从终端运行这个脚本时,一切都很好。但是当我从浏览器运行它时:
http://localhost/cgi-bin/test.py
我收到此错误(再次,只有在我没有添加额外的打印命令时)。 我当然使用Apache服务器。
答案 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