【问题标题】:How to handle Python files with Apache如何使用 Apache 处理 Python 文件
【发布时间】:2020-01-18 19:22:15
【问题描述】:

所以我想进入 React Native 开发并决定 Python 作为我的后端,但由于某种原因我无法正确配置 Apache。从请求中成功获取结果的唯一方法是在文档开头包含python.exe 的路径,如下所示:

!C:\Users\Name\PycharmProjects\AppName\venv\Scripts\python.exe

但问题是该文件不是由 Python 控制台执行的,如果我想通过手机访问它会出现此错误:

服务器遇到内部错误,无法完成您的请求。服务器过载或 CGI 脚本出错。

所以我的问题是:

有没有什么方法可以配置 Apache 来执行文件,而不需要 py 控制台,因此请求可能由没有安装 Python 控制台的设备处理?

【问题讨论】:

  • 我不明白你的问题 - Apache 在服务器上运行,如果它运行 python 代码,那么它在服务器上运行,而不是在用户设备上。也许您不使用 Apache 运行它。您是否在 Apache 中安装了模块 mod_cgimod_fcgimod_python?或者可能使用更流行的方法并使用任何 Web 框架,例如 Flask/Django,而不是使用 Apache。
  • 我的问题是每当我发送请求以获取用python编写的文件时,都会显示此错误。 “服务器遇到内部错误,无法完成您的请求。服务器超载或 CGI 脚本出错。” 我无法让 apache 正确执行文件,我已启用 mod_cgi.so。还在 httpd.conf 中创建了特定的 ,它只负责 python 文件......可能会尝试 Django 或 Flask,但我只是好奇 apache 是否可以执行 python 文件。
  • 顺便说一句:据我所知,它仅在子文件夹cgi-bin/ 中运行文件,因此首先您可以尝试将代码放入此文件夹中。在 Linux 脚本上,第一行需要 shebang #!/usr/bin/env python,它应该是可执行的 - chmod a+x script.py
  • 如果您从移动设备连接到服务器上的http://192.168.1.3/HelloWorld.py(使用 CGI),那么代码应该在服务器上执行,而不是在移动设备上。如果 CGI 不起作用,那么服务器可能会尝试将代码作为普通文件发送,然后移动设备可能会尝试在本地运行它,但这是错误的 - CGI 服务器应该在服务器上运行代码。一开始我会将代码放在子文件夹cgi-bin 中以http://192.168.1.3/cgi-bin/HelloWorld.py 运行,因为大多数CGI 服务器默认运行代码只在这个子文件夹中。
  • 顺便说一句:CGI 也有一些规则如何生成它将发送给客户端的数据。它可能在开始时需要 HTTP 协议的额外信息 - 并且仅使用 print("Hello World") 可能会生成错误数据并且发送它可能有问题。您应该在任何 CGI 脚本教程中都有它。见模块cgi

标签: python apache cgi


【解决方案1】:

如果您使用CGI 从移动设备连接到服务器上的http://192.168.1.3/HelloWorld.py,则代码应在服务器上执行,而不是在移动设备上执行。如果CGI 不起作用,那么服务器可能会尝试将代码作为普通文件发送,然后移动 mdevice 可以尝试在本地运行它,但这是错误的 - CGI 服务器应该在服务器上运行代码。

一开始我会将代码放在子文件夹cgi-bin 中以将其作为http://192.168.1.3/cgi-bin/HelloWorld.py 运行,因为大多数CGI 服务器作为默认运行代码仅在此子文件夹中。


在 Linux 上的脚本需要 shebang

#!/usr/bin/env python

在第一行,它应该是可执行的

chmod a+x script.py

CGI 也有一些规则如何生成将发送给客户端的数据。它可能在开始时需要HTTP 协议的额外信息 - 并且仅使用 print("Hello World") 可能会生成错误数据并且发送它可能有问题。您应该在CGI 脚本的任何教程中都有它。见模块cgi


要运行 Python 的代码,Apache 需要模块 mod_cgimod_fcgimod_python

mod_cgimod_fcgi可以运行不同语言的脚本:PythonPerlRuby等,甚至BashPHPC/C++/@ 987654348@


Python3 有标准模块http 也可以用作简单的服务器

python3 -m http.server --cgi 

它将为您运行它的文件夹中的所有文件提供服务。它从子文件夹 cgi-bin/ 运行文件 - 请参阅文档:http

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2011-07-02
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多