【发布时间】:2020-02-13 06:43:15
【问题描述】:
(重要)免责声明:我知道这可能不是一个好主意,Python 不像 PHP,并且使用 Python 做 Web 的“自然”方式更多是通过使用像 Bottle、Flask、 Django(我已经使用过)等。但是,出于好奇,我还是想看看以下是如何实现的。
安装Apache + PHP后,我们可以访问http://www.example.com/index.php这样的页面。在内部,Apache 可能将请求传递给 PHP,PHP 执行代码,生成文本输出,然后由 Apache 提供服务。
问题:我们如何在 Python 中做类似的事情?即通过访问 http://www.example.com/index.py,Apache 将调用脚本 index.py:
print("<html><body>Hello world</body></html>")
然后 Apache 会将此页面提供给客户端。
注意:
调用
http://www.example.com/index.py?foo=bar甚至可以将参数提供给sys.argv中的Python 脚本-
我已经这样做了:
http://www.example.com/index.php:<?php $out = shell_exec("python index.py"); echo($out); ?>然后调用 Python 脚本并生成输出。它可以工作,但我想不使用 PHP。
换一种说法,Python 有没有类似
mod_php的东西?
【问题讨论】:
-
apache 有模块
mod_python来运行 python 脚本,还有mod_fcgi来运行任何语言的脚本(即 python、perl、ruby、bash)。 -
查看Python - CGI programming 了解如何为
mod_fcgi编写代码 -
关于赏金的注释(我忘了添加注释):
mod_python经常被引用为不再维护。现在有没有一个很好的解决方案,不需要需要 Python 框架,并且不需要在端口上侦听不断运行的脚本。相反,我希望在调用 www.example.com/test.py 时,网络服务器(apache 或 nginx)直接调用 test.py。 -
总是必须是一些始终运行并侦听端口的代码。如果你运行 Apache/Nginx/WSCGI,那么这个服务器会一直运行并监听端口。而且我不会期望不需要 Python 框架的新解决方案,因为框架更容易,而且代码组织得更好。即使在 PHP 中,也有很多人更喜欢 PHP 框架而不是纯 PHP。