.py python 文件显示代码而不是在 webhost 上执行

.py python file displaying code instead of executing on webhost

我正在尝试获取一个 html 页面来进行文本输入并让 python 脚本获取并打印出来。当我在虚拟主机试用期间,我的这个工作正常,在我升级到一个完整的帐户后,我转移了文件,但它停止工作了。我可能错过了设置中的一个步骤,但我不知道在哪里。这是我所做的:

我设置了一个 python virtualenv,然后我通过进入 SSH 并输入 source /home/username/virtualenv/test/3.5/bin/activate 来激活它,并确认它已被激活。

然后我尝试 运行 我的 index.html 文件夹中的 public_html 文件:

<!DOCTYPE HTML>
<html>
  <head>
<title>Test</title>
  </head>
  <body>
    <form action="/cgi-bin/hello.py" method="get">
        Enter Message: <input type="text" name="message">
        <input type="submit" value="submit">
    </form>
  </body>
</html>

一切都正确显示。当我在输入框中输入任何内容并单击提交时,它应该执行我的 hello.py 脚本,该脚本位于我的 cgi-bin 文件夹中:

#!/home/username/virtualenv/test/3.5/bin/python

import cgi

data = cgi.FieldStorage()

print ("Content-Type: text/html\n")
print (data["message"].value)

所有显示的都是实际的 python 代码,而不是来自 html 的输入。

我也在 python 脚本中使用 #!/usr/bin/python 进行了尝试,它仍然只显示 python 代码。

通过在 cgi-bin 文件夹中创建一个具有以下规则的 .htaccess 文件修复了该问题:

Options +ExecCGI AddHandler cgi-script .py

我添加这个,希望它能在您将来迁移到另一个主机或任何类似情况时对您有所帮助。你需要知道在后台发生了什么。

另外,考虑勾选标记(直到它变成绿色),这样人们就会知道这个问题得到了回答。 https://whosebug.com/help/accepted-answer


基本上,Apache 需要知道 .py 文件将作为 CGI 脚本执行。在具有 root 访问权限的完整 VPS 帐户上,您需要编辑 apache 配置文件 (httpd.conf) 或像上面那样添加一个 .htaccess 文件。

在共享主机(我假设您正在使用)上,您没有 root 访问权限,只有第二个选项可以工作(就像它一样)。

此外,请考虑为您的脚本使用 .cgi 而不是 .py(Python 效果相同),因为这是 apache 上 cgi 脚本的默认处理程序。