给出内部服务器错误的基本python脚本

时间:2012-05-19 14:04:14

标签: python

我正在使用hostgator,他们发誓支持python,但我还没有看到一个正在运行的python脚本。我已经尝试了几个脚本,我最新的脚本就是他们在网站上提供的脚本:

#!/usr/bin/python
print "Content-type: text/html\n\n";
print "<html><head>";
print "<title>CGI Test</title>";
print "</head><body>";
print "<p>Test page using Python</p>";
print "</body></html>";

我收到内部服务器错误: http://elkuzu.com/cgi-bin/test.py

该文件具有755个权限,文件夹cgi-bin也是如此。他们拒绝帮助我解决他们所谓的“编码”问题...但是除了内部服务器错误之外,我已经尝试过并且只收到内部服务器错误,我认为问题在于他们。谁知道什么可能是错的?

错误日志:

[Sat May 19 09:11:38 2012] [error] [client 74.129.48.242] File does not exist: /home/elkuzu/public_html/404.shtml
[Sat May 19 09:11:38 2012] [error] [client 74.129.48.242] File does not exist: /home/elkuzu/public_html/favicon.ico
[Sat May 19 09:11:37 2012] [error] [client 74.129.48.242] File does not exist: /home/elkuzu/public_html/500.shtml

我和我的主持人(hostgator)谈过,他们把它变成了一张票,这让我觉得有些事情已经结束了。

2 个答案:

答案 0 :(得分:7)

关于如何使用Python作为CGI,有documentation

在您的情况下,问题是行结尾。它们是每行末尾隐藏的角色。

  

在类Unix系统上,程序文件中的行结尾必须是   Unix风格的行结尾。这很重要,因为Web服务器   检查脚本的第一行(称为shebang)并尝试运行   那里指定的程序。它很容易被Windows系列混淆   结尾(回车和换行,也称为CRLF),所以你有   将文件转换为Unix行结尾(仅限换行,LF)。这个   可以通过FTP在文本模式下上传文件自动完成   而不是二进制模式,但首选方式只是告诉你的   编辑器用Unix行结尾保存文件。大多数编辑都支持   此

在Windows(即记事本)上,它们表示为(CR LF或\r\n),而在unix上它们是(LF或\n)。

Notepad++中,您可以将行结尾视为符号,如下所示:查看 - &gt;显示符号 - &gt;显示行尾

要使用unix替换Windows换行符,您可以使用:搜索 - &gt;替换...

在替换对话框中,找到\r\n,并将其替换为\n。确保选择了扩展搜索模式。

Notepad++ replace dialogue screenshot


或者,您可以使用编辑 - &gt; EOL转换 - &gt; UNIX格式

Notepad++ EOL Conversion screenshot

答案 1 :(得分:0)

我知道这是一个老问题,但我也遇到了与hostgator的500错误(指出我一年前放弃尝试)。几天前,他们决定再次尝试“tutorial”并再次尝试它。

我尝试更简单的方法:

#!/usr/bin/python
import sys
print sys.version_info

我再次遇到500错误,但是在与支持人员聊天后,他们给出了一条日志消息 话说:

  

[error] [client 192.x.x.x]来自脚本的格式错误的标头。错误的标题=(2,6,6,'最终',0):test1.py

使用该信息(日志消息包含python所以它在某种程度上正在执行)我在Unix site找到了这篇文章,我得到了这个:

  

当HTTP规范(以及来自HTTP服务器的错误消息)指定时,HTTP标头和正文之间需要一个空行,否则服务器不知道标题的结束位置和正文开始。

我将脚本更改为:

#!/usr/bin/python
print ""
import sys
print sys.version_info

它有效!奇怪的是,在成功运行此脚本之后,教程中的示例(下面的代码)现在也适用于我

#!/usr/bin/python
print "Content-type: text/html\n\n";
print "<html><head>";
print "<title>CGI Test</title>";
print "</head><body>";
print "<p>Test page using Python</p>";
print "</body></html>";

为什么现在有效?我不知道,但至少我希望这个答案可以帮助有人处理hostgator [缺乏]支持。