在浏览器上打开 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_python
和 WSGI
。
【讨论】:
谢谢鲍比!你能给我一些关于如何使用 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
尝试在 Apache 2.4.6 Ubuntu 13.10 上运行 perl cgi 文件时出现 500 内部服务器错误
尝试在 Apache 2.4.6 Ubuntu 13.10 上运行 perl cgi 文件时出现 500 内部服务器错误