可以在没有像Django和Flask这样的框架的情况下,使用HTML和CSS运行python脚本吗?如果是这样的话,是怎么做的?
当一个按钮被单击时,我正在尝试运行一个python脚本,并返回一个输出以显示在屏幕上。我该怎么做呢?
发布于 2019-11-26 16:41:38
好的,Django和Flask为你做了所有的HTTP处理,所以你不需要手动去做。尽管如往常一样,在Python中,你可以用one liner
的方式做很多事情。
您可以使用SimpleHTTPServer
。
CHeckout这个答案:Single Line Python Webserver
发布于 2019-11-26 17:17:33
您可以使用所谓的cgi-bin脚本。Apache和NGINX都可以提供cgi-bin脚本,但是NGINX需要一个外部模块来处理(例如FastCGI)。Apache已经内置了这个(尽管,我怀疑,也是作为一个模块)。
以How to run CGI scripts on Nginx为例,查看NGINX的配置。这个示例介绍了如何运行Perl脚本,但这一点并不重要。然而,这是一个相对复杂的配置。
这是另一个答案,这次是How to run cgi script on apache server,带有针对Apache的示例。同样,使用的语言并不那么重要,Python将尽可能重要。
然后,CGI脚本本身可以用任何语言(shell、Python、Perl、C、Go或任何您喜欢的语言)编写-它所要做的就是确保其输出格式正确,输出的第一行指定内容类型,例如:
Content-type: text/html
<html>
<head>
<title>test page generated by CGI script</title>
</head>
<body>
<h1>boo hoo!</h1>
</body>
</html>
生成上述代码的Python脚本示例:
#!/usr/bin/env python
#
# Example Python CGI script generating static HTML
HTML = \
"""
<html>
<head>
<title>test page generated by CGI script</title>
</head>
<body>
<h1>boo hoo!</h1>
</body>
</html>
"""
def generate_html(html):
print('Content-type: text/html\r\n')
print(html)
if __name__ == '__main__':
generate_html(HTML)
显然,这个脚本没有做任何有用的事情,但是您可以让它做一些其他的事情,并提供适当的HTML输出。
然后,您可以将python文件设置为可执行文件(chmod 755 generate_html.py
),还可以选择将其重命名为.cgi
扩展名(这是这些文件的传统命名方式;mv generate_html.py generate_html.cgi
),并将其放置在web服务器的cgi-bin目录中(我假设您的web服务器根目录为/var/www
,cgi-bin目录为/var/www/cgi-bin/
-这是您需要放置generate_html.cgi
文件的位置)。
最后,您的标准index.html
(放在www文档根目录中,例如/var/www/html
)可以像下面这样简单:
<html>
<head>
<title>main page</title>
</head>
<body>
<p><a href='/cgi-bin/generate_html.cgi'>Do something</a></p>
</body>
</html>
如果一切都配置正确,您应该会看到Python脚本的输出(一个带有大大的单词的HTML页面),而不是脚本本身的源代码。
免责声明
这会带来安全隐患,特别是如果其他用户可以更改cgi脚本的内容,因为这些脚本在系统上运行,并且具有与运行web服务器应用程序或cgi网关进程的用户相同的访问权限。确保您了解环境中的全部含义。
TL;DR
你可以在没有Flask、Django或任何其他框架的情况下运行Python脚本作为cgi-bin
脚本。Apache和NGINX都支持这一点,但配置可能会更复杂一些。不知道你能节省多少时间。
https://stackoverflow.com/questions/59055454
复制相似问题