怎么通过浏览器执行python脚本,并显示执行

肉鸽 2017-10-26 12:43:40
可能是概念不清,我慢慢说:
先说python+apache的环境
apache的配置中打开cgi支持,目录指定为/var/www/cgi-bin
.py文件放在/var/www/cgi-bin目录下,只要py文件有里先输出
print "Content-type: text/html"
print
这两句,其后的print内容,都可以直接在浏览器中显示出来

浏览器的访问方式为:
http://localhost/cgi-bin/a.py
http://localhost/cgi-bin/b.py
http://localhost/cgi-bin/z.py

就是说,我只用关注?.py文件来完成逻辑功能就行了。
===============================================
但是在python+nginx+uWSGI的环境下,我就有点懵圈了。
网上查的资料一般是这么写的
先建个.py文件
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"

然后启动uwsgi
uwsgi --http :8001 --wsgi-file /var/www/cgi-bin/test.py

nginx的配置就不说了,代理到uwsgi


我的困惑就是,启动uwsgi时,指定了test.py文件,那么我还有其他的
a.py、b.py、c.py,其后可能编写的xxx.py,那也要对应启动一个uwsgi进程?
这好像不太科学啊,或者说不是我想要的。

我希望能像Apache的环境那样,以后编写的.py文件,
我只要把文件放在/var/www/cgi-bin目录下,我就可以通过浏览器,以
http://localhost/cgi-bin/xxx.py
的形式得到.py执行的结果

请各位前辈指导一下,是我的概念没搞清楚,还是实现方案不对,谢谢了。
...全文
3341 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
木鱼天 2020-06-19
  • 打赏
  • 举报
回复
最近在学习.py程序的浏览器触发执行。您说Apache的方法在win上试了一下,出现Internal Server Error问题,前来向您请教。
肉鸽 2017-10-30
  • 打赏
  • 举报
回复
先谢谢楼上几位朋友的回复,我找到解决方案了: 1、先创建uwsgi_config.ini配置文件 [uwsgi] plugins = cgi socket = 127.0.0.1:7878 chdir = /var/www/html/cgi-bin/ cgi=/cgi-bin=/var/www/html/cgi-bin/ cgi-helper=.py=python 2、启动uwsgi,服务在后台运行 ./uwsgi uwsgi_config.ini& 3、修改Nignx配置 location /cgi-bin { #引入uwsgi_params文件 include uwsgi_params; #对当前location的请求进行cgi脚本处理 uwsgi_modifier1 9; #TCP连接方式 uwsgi_pass 127.0.0.1:7878; } 重启Nginx服务后,就可以实现了。
混沌鳄鱼 2017-10-27
  • 打赏
  • 举报
回复
你这个需求让人看得晕了,不明白你想干什么? nginx已经不支持CGI这种上古模式了。 你要执行多个Python脚本并获取返回信息,可以直接 用 import os return_info = os.popen('python a.py').read() 相对来说还是用个web框架方便一些。比如bottle
肉鸽 2017-10-26
  • 打赏
  • 举报
回复
很感谢楼上大大的回复。
那如果我想实现Apache那样的cgi效果,在nginx下不用uWSGI,应该用什么来实现呢?
ForestDB 2017-10-26
  • 打赏
  • 举报
回复
一般对于CGI来说,一个请求一个进程;对于WSGI,整个app是个进程,然后请求被转发到app,app的结果传回web服务器。
ForestDB 2017-10-26
  • 打赏
  • 举报
回复
先说概念,前者是CGI,后者是WSGI。CGI的一个URL对应于一个文件,WSGI的一个URL对应于一个应用的入口文件。 再说实现,就算是CGI,一个URL对应于一个文件,但是完全可以把这个文件做成一个应用入口,将不同的请求分发到不同的文件去执行; 对WSGI,也可以在一个根路径下创建不同的应用入口,产生一个URL对应于文件的感觉。
ForestDB 2017-10-26
  • 打赏
  • 举报
回复
既是概念没搞清楚,又是实现方案不对。
oyljerry 2017-10-26
  • 打赏
  • 举报
回复
uwsgi是一个Application container,你可以指定一个test.py,然后它内部来处理不同的http path,根据不同的path调用不同的py脚本执行对应的功能,这个跟cgi有区别

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧