.py 文件在浏览器中显示代码而不是运行

Posted

技术标签:

【中文标题】.py 文件在浏览器中显示代码而不是运行【英文标题】:.py file showing code in browser instead of running 【发布时间】:2012-04-24 20:06:46 【问题描述】:

我正在尝试开始使用 Python,但无法为 localhost(使用 Ampps)正确设置服务器。 Python 通过 IDLE 和命令行运行得很好,但是,当我在浏览器中打开文件时,代码显示并没有运行。

我按照这个http://www.imladris.com/Scripts/PythonForWindows.html 教程来设置cgi,但它不起作用。

这是我的“hello world”程序的代码,如果有什么不同的话。

#!/usr/bin/env python
# -*#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello Word - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! This is my first CGI program</h2>'
print '</body>'
print '</html>'

有什么建议吗?

【问题讨论】:

您是否使文件可执行?服务器中是否启用了 cgi 脚本? 在你完成这项工作后 - 检查 Python 的多行字符串语法,使用三引号,如 """ something """ @JoachimPileborg 我相信我在服务器上启用了 cgi 脚本,但我不确定是否要使文件可执行。当我查看文件(文件本身的图标,而不是代码)时,它上面有 python 标志,所以我不确定这是否意味着它是可执行的。 如果我的回答对您有帮助,并且您认为它是正确的,请考虑将其标记为该问题的已接受答案。谢谢。 【参考方案1】:

您的 Web 服务器将您的 Python 代码视为静态文件而不是可执行文件。这里的目标是您希望 Apache 执行 python 并将标准输出发送回用户的浏览器。

我不熟悉 Ampps,但获取此设置的基本 Apache 流程是这样的。

    编辑 httpd.conf 的 Options 行以包含 ExecCGI 通过添加以下行将您的 python 文件与 httpd.conf 注册为 cgi 处理程序:AddHandler .py 重启 Apache 确保你的 shebang 行(顶部的 #!/usr/bin/env python 位)实际上指向你的 python 可执行文件的路径。对于生活在 C: 上的 python2.6,这可能是:#!\Python26\python 如果您的脚本必须是可移植的,不要修改 shebang 行,而是将行 ScriptInterpreterSource registry 添加到您的 httpd.conf,并确保 windows 默认使用 Python.exe 打开 *.py 文件。这可以通过双击脚本来测试。如果它没有执行,请右键单击它,选择打开方式,然后选择其他,然后浏览到您的 python.exe。确保选中“始终使用此程序打开此类文件”框。在此here 上有一篇 Microsoft 知识库文章。

最后,mod_wsgi 或 FastCGI 是让 Apache 执行 python 的首选方法,优先选择较低流量的站点(每天有成千上万的请求)。我还建议研究 web 框架,例如 web.py(非常轻量级)或 django(较重,但如果您正在收集用户输入或与数据库交互,可以节省大量时间)。

mod_wsgi setup instructions. FastCGI documentation(在 Windows 上进行设置可能会很痛苦) Django getting started web.py tutorial

【讨论】:

Ampps 是我看到的第一个内置 python 的包,所以我选择了它。你还有其他推荐的吗?我在使用 php 编程时使用 xampp,不确定是否支持它。 我没有意识到“Ampps”是 Apache 的 Windows 风格——我主要是 Linux 人,我主要使用 Lighttpd。请查看编辑后的答案。 另外,使用 mod-wsgi 比使用 cgi 更好。我将再次编辑答案以反映这一点,并添加链接。 我有一个地狱般的时间让它运行。我对 PHP 非常有经验,并且已经设置了大约一百万次 apache。那里必须有一些更简单的方法。我读过的所有东西都需要编译源代码和各种垃圾。如果python这么难设置,难怪为什么更多的人不费心学习如何编程。 PHP是轻而易举的开始,不确定Python。我已经做了大约 2 个小时了,但一无所获。 没有进入 win/lin 辩论,Apache 是从头开始为 unix 风格的系统设计的,让它在 Windows 上运行良好是一种扭曲。我讨厌提出这个建议,但如果 Windows 是必须的,您可以尝试使用 IIS 的更友好的方式 - 请参阅此知识库文章 support.microsoft.com/kb/276494【参考方案2】:

给定的解决方案在树莓派 3 B+ 上对我有用:

1) 尝试编辑:sudo nano /etc/apache2/sites-enabled/000-default.conf

2) 在此文件中添加以下代码:

    <Directory /var/www/html>
            Options +ExecCGI
            AddHandler cgi-script .py
            # DirectoryIndex index.py
    </Directory>

3) 重启 apache2 : sudo service apache2 restart

4) 在您的代码中只需添加上面的几行:

#!/usr/bin/env python3
import cgitb
cgitb.enable()
print("Content-Type:text/html;charset=utf-8")
print()
print("Hello world")

5) 你的代码应该可以工作;)

【讨论】:

您能否更深入地了解为什么此解决方案有效?

以上是关于.py 文件在浏览器中显示代码而不是运行的主要内容,如果未能解决你的问题,请参考以下文章

PHP文件在浏览器中打开而不是运行[重复]

apache给出403禁止下载.py文件

Python 文件在浏览器窗口中打开,而不是下载提示

服务器nginx配置显示文件而不是下载

在浏览器中打开 SVG 会呈现 XML 代码而不是图像

如何在浏览器而不是控制台中显示 servlet 提供的信息?