我有一个python脚本的集合,我希望能够与按钮按下,从网络浏览器执行。
目前,我在端口8000上运行python -m http.server 8000
来启动服务器。它能很好地提供html页面,但这就是它所能做的一切。是否可以让它执行python脚本(通过ajax)并返回输出,而不仅仅是返回.py文件的全文。
另外,如果没有,有没有一种简单的方法(比如只有一两个文件)来实现这一点呢?我正在寻找python的等价物,但用于-s。
为了完整起见,下面是我的html
<h1>Hello World</h1>
<button>
Click me!
</button>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.js"> </script>
<script>
$('button').click(function(){
$.get('/gui/run_bash.py');
});
</script>
发布于 2018-03-21 06:58:13
将--cgi
添加到命令行。
python -m http.server --cgi 8000
然后将python脚本放在./cgi-bin中,并将它们标记为可执行文件。
$ mkdir cgi-bin
$ cp hello.py cgi-bin/hello.py
$ chmod +x cgi-bin/hello.py
您可能需要稍微修改python脚本以支持CGI协议。
下面是正在运行的服务器:
$ cat cgi-bin/hello.py
#! /usr/bin/env python3
print("Content-Type: application/json")
print()
print('{"hello": "world"}')
radams@wombat:/tmp/z/h$ python -m http.server --cgi
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [20/Mar/2018 18:04:16] "GET /cgi-bin/hello.py HTTP/1.1" 200 -
参考:https://docs.python.org/3/library/http.server.html#http.server.CGIHTTPRequestHandler
发布于 2018-03-21 06:04:38
http.server
只服务于静态文件,当你访问python文件时,它不做任何服务器端处理或执行任何代码。如果您想运行一些python代码,则必须编写一个应用程序来执行此操作。Flask是一个Python web框架,可能非常适合这项任务。
你的flask应用程序可能看起来像这样来执行脚本...
import subprocess
from flask import Flask
app = Flask(__name__)
SCRIPTS_ROOT = '/path/to/script_dir'
@app.route('/run/<script_name>')
def run_script(script_name):
fp = os.path.join(SCRIPTS_ROOT, script_name)
try:
output = subprocess.check_output(['python', fp])
except subprocess.CalledProcessError as call:
output = call.output # if exit code was non-zero
return output.encode('utf-8') # or your system encoding
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8000)
当然,我应该包括一个强制性的警告,“让the服务器执行这样的命令是不安全的”,等等。查看Flask quickstart了解更多详细信息。
https://stackoverflow.com/questions/49394355
复制相似问题