如何使用http.server执行服务器端python脚本?
我有一个python脚本的集合,我希望能够通过按下按钮从web浏览器执行这些脚本 目前,我运行如何使用http.server执行服务器端python脚本?,python,python-3.x,Python,Python 3.x,我有一个python脚本的集合,我希望能够通过按下按钮从web浏览器执行这些脚本 目前,我运行python-mhttp.server8000在端口8000上启动服务器。它可以很好地提供html页面,但仅此而已。是否可以让它执行python脚本(通过ajax)并返回输出,而不仅仅是返回.py文件的全文 此外,如果没有,是否有一种简单的方法(如仅在1或2个文件中)来实现这一点?我正在寻找PHP-s的等价物,但是python 为了完整起见,这是我的html <h1>Hello World&
python-mhttp.server8000
在端口8000上启动服务器。它可以很好地提供html页面,但仅此而已。是否可以让它执行python脚本(通过ajax)并返回输出,而不仅仅是返回.py文件的全文
此外,如果没有,是否有一种简单的方法(如仅在1或2个文件中)来实现这一点?我正在寻找PHP-s的等价物,但是python
为了完整起见,这是我的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>
你好,世界
点击我!
$(“按钮”)。单击(函数(){
$.get('/gui/run_bash.py');
});
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)
导入子流程
从烧瓶进口烧瓶
app=烧瓶(名称)
SCRIPTS\u ROOT='/path/to/script\u dir'
@app.route(“/run/”)
def运行脚本(脚本名称):
fp=os.path.join(脚本\根,脚本\名称)
尝试:
输出=子进程。检查输出(['python',fp])
除了subprocess.CalledProcessError作为调用外:
输出=call.output#如果退出代码为非零
返回输出.encode('utf-8')#或您的系统编码
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
应用程序运行(主机=127.0.0.1',端口=8000)
当然,我应该包括一个强制性警告“让Web服务器执行这样的命令是不安全的”,等等。有关更多详细信息,请查看。将--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蟒蛇3
打印(“内容类型:应用程序/json”)
打印()
打印(“{”你好“:“世界”}”)
radams@wombat:/tmp/z/h$python-m http.server--cgi
在0.0.0.0端口8000上提供HTTP服务(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-
参考资料:
http.server
就是这样——一种为静态文件提供服务的方式。它不进行任何服务器端处理。您可能想看看像Flask这样的框架,它可以让您以最小的工作量创建这样的应用程序。