4

我正在使用 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)谈过了,他们把它变成了一张票,这让我觉得他们有什么事情发生了。

4

2 回答 2

7

有关于如何将 Python 用作 CGI的文档。

在您的情况下,问题是行尾。它们是每行末尾的隐藏字符。

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

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

Notepad++中,您可以将行尾视为符号,如下所示: View -> Show Symbol -> Show End of Line

要将 windows 换行符替换为 unix 换行符,您可以使用:搜索 -> 替换...

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

Notepad++替换对话截图


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

Notepad++ EOL 转换截图

于 2012-05-19T14:10:32.213 回答
0

我知道这是一个老问题,但我在使用 hostgator 时也遇到了 500 错误(表明我在一年前放弃了尝试)。几天前决定按照他们的“教程”再试一次,但它又没用。

我尝试一些更简单的东西:

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

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

[错误] [client 192.xxx] 来自脚本的错误标头。错误的标头=(2, 6, 6, 'final', 0): test1.py

有了这些信息(日志消息包含 python,所以它以某种方式执行)我在Unix 站点找到了这篇文章,我得到了这个:

正如 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 [缺乏] 支持的人。

于 2016-06-07T00:52:39.537 回答