在浏览器上打开 python 文件时出现 500 Internal Server Error [关闭]

Posted

技术标签:

【中文标题】在浏览器上打开 python 文件时出现 500 Internal Server Error [关闭]【英文标题】:I get 500 Internal Server Error when opening a python file on the browser [closed] 【发布时间】:2012-06-13 13:21:30 【问题描述】:

我无法打开我的 python 文件。我是使用 python 的新手,我来自 php 背景,这对我来说完全不同。 我在服务器 `public_html/python/index.py' 上用一个简单的 hello world 代码创建了一个测试文件:

#!/usr/bin/python

print 'Content-type: text/html\r\n'
print '\r\n'
print 'Hello, World!'

我一直在环顾四周,显然我需要执行一些配置步骤才能运行 python 文件。

在 shell y 上,通过运行 python 确保 python 已安装并正常工作:

Python 2.4.3 (#1, Feb 22 2012, 16:05:45) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

然后我寻找安装python的正确路径type -p python,它是正确的:

user@domain.com [~]# type -p python
/usr/bin/python

最后我在一篇博客中读到,为了在 cgi-bin 文件夹之外执行 python 文件,我需要使用以下几行修改我的 .htaccess 文件:

Options +ExecCGI
AddHandler cgi-script .cgi .pl .py

这也不起作用,但即使我尝试在 cgi-bin 文件夹中运行它,我仍然会遇到同样的错误。

以防万一我也更改了文件的权限,什么都没有:

user@domain.com [~]# chmod a+x public_html/python/index.py

在所有这些之后,当我尝试在 Web 浏览器上打开 url 时,我仍然收到 500 内部服务器错误。

当我执行od index.py -c 时,我得到以下信息:

0000000   #   !   /   u   s   r   /   b   i   n   /   p   y   t   h   o
0000020   n  \r  \n  \r  \n   p   r   i   n   t       '   C   o   n   t
0000040   e   n   t   -   t   y   p   e   :       t   e   x   t   /   h
0000060   t   m   l   \   r   \   n   '  \r  \n   p   r   i   n   t    
0000100   '   \   r   \   n   '  \r  \n   p   r   i   n   t       '   H
0000120   e   l   l   o   ,       W   o   r   l   d   !   '
0000135

感谢这位不起眼的 python 新手的帮助和指导。 顺便说一句,我在专用服务器中使用 WHM 和 CPanel。

【问题讨论】:

Python 不是 PHP:你不能在这样的 HTML 页面中内联代码。考虑改用网络框架。 od index.py -c 的输出是什么? 我将结果添加到我的问题中,谢谢! 【参考方案1】:

要将标题与正文分开,您需要添加\r\n 两次。此外,所有标题都需要用一个 \r\n 分隔。

源应该是这样的,

import sys

sys.stdout.write('Content-type: text/html\r\n')
sys.stdout.write('\r\n')
sys.stdout.write('Hello, World!')

另一个问题可能是你的 shebang 行的行尾。它应该是unix之类的。这意味着#!/usr/bin/env python 应该以\n 结尾。尝试使用一些显示行尾的编辑器打开它。或者在命令提示符od -c index.py。它将显示行尾。如果是\r\n,则需要设为\n

更新:

在偏移量 21 处,您有 \r。那就是问题所在。通过以下命令删除\r

tr -d \r < index.py > new.index.py

现在new.index.py 应该是\n 行结束。

【讨论】:

感谢 Shiplu,我尝试了您的代码,但仍然出现同样的错误。但只是出于好奇,为什么打印不好?谢谢 @EddyXP 你也可以使用print。 Print 隐式附加换行符。所以我使用了sys.stdout.write。如果您的问题在此之后没有出现,请显示 Apache 错误日志。错误应该在那里。专门针对 5xx 错误。 在错误日志中我得到:[Sun Jun 10 01:50:43 2012] [error] [client myip] 文件不存在:/home/username/public_html/500.shtml跨度> 不是这个。应该还有其他错误。 @EddyXP 关注此***.com/a/8982009/376535【参考方案2】:

如果您使用的是 Apache,那么您应该使用 mod_pythonWSGI

【讨论】:

谢谢鲍比!你能给我一些关于如何使用 mod_python 和 WSGI 的参考吗,现在这对我来说是中文的。谢谢! 一个好的起点是modpython.org 和wsgi.readthedocs.org/en/latest @EddyXP 有点离题,但绝对比中文容易。 . google 一些 WSGI 教程,运行 Hello World 应该很容易 mod_python 已经很久没有激活了,你现在应该使用 mod_wsgi。 @ThomasOrozco 因为 mod_python 不再使用,我在提供选项。在为其他人提供寻找最佳解决方案的方向时,他们需要对人们投反对票,这是怎么回事。

以上是关于在浏览器上打开 python 文件时出现 500 Internal Server Error [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

打开 XAMPP 的 phpmyadmin 时出现错误 500

上传到 Azure 存储时出现内部 500 错误

上传文件时出现 HTTP 500 内部服务器错误 [重复]

尝试在 Apache 2.4.6 Ubuntu 13.10 上运行 perl cgi 文件时出现 500 内部服务器错误

尝试在 Apache 2.4.6 Ubuntu 13.10 上运行 perl cgi 文件时出现 500 内部服务器错误

为啥在使用 file_get_contents() 时出现 500 错误,但在浏览器中有效?