【问题标题】:Internal Server Error with very simple python script非常简单的python脚本的内部服务器错误
【发布时间】:2013-12-03 12:16:09
【问题描述】:

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

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

#!/usr/bin/python

print 'hi'

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

#!/usr/bin/python
print

print 'hi'

有什么解释吗?谢谢!

更新:

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

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

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

【问题讨论】:

  • 确切的错误堆栈跟踪是什么?
  • 我很惊讶您在运行简单脚本时收到“内部服务器错误”。我注意到了“apache”标签,但这并没有说明你实际运行脚本的方式......
  • 嗨,我更新了我的问题。

标签: python macos apache cgi


【解决方案1】:

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

...并且需要初始(空)print 来表示标题的结尾。

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

编辑:更多解释:

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

一个 HTTP 响应由一个标头块、一个空行和所谓的正文内容组成。即使您应该生成 some 标头,也不是必须这样做。但是,您确实需要输出空行; 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

【讨论】:

  • 嗨,谢谢。我检查了一下,它说“脚本中的标头格式错误。错误的标题=嗨:test.py'。这是什么意思?
  • 脚本的输出对 CGI 无效。它应该在常规输出之前输出有效的 HTTP 标头。
猜你喜欢
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
相关资源
最近更新 更多