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

Avi*_*dok 0 python apache macos cgi

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

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

#!/usr/bin/python

print 'hi'
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/python
print

print 'hi'
Run Code Online (Sandbox Code Playgroud)

任何解释?谢谢!

更新:

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

http://localhost/cgi-bin/test.py
Run Code Online (Sandbox Code Playgroud)

我得到这个错误(再次,只有我没有添加额外的打印命令).我当然使用Apache服务器.

rob*_*lep 6

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

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

检查Apache的错误日志(/var/log/apache2/error.log可能),看它是否显示" 脚本标题过早结束 "(此处有更多信息).

编辑:更多解释:

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

HTTP响应由标题块,空行和所谓的正文内容组成.即使您应该生成一些标题,也不是必须这样做.但是,您确实需要输出空行; 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
Run Code Online (Sandbox Code Playgroud)