Python flask 网页版执行shell命令并返回结果['GET', 'POST'] 混合方式
前言全局说明
Python flask 网页版执行shell命令并返回结果
源码下载:https://files.cnblogs.com/files/wutou/py_flask_cmd.zip (7.21KB)
一、需要安装的库
pip3 install flask==2.3.2 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pip3 install subprocess -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
更多国内源: https://www.cnblogs.com/wutou/p/17949398
二、index-cmd.html
<html lang="zh-cn"> <head> <meta content="text/html; charset=utf-8" http-equiv="content-type" /> <style> .abc {margin:0 auto;width:720px; solid;text-align:left;} </style> </head> <body> <div class="abc"> <center><h2>Python-flask 执行 shell 命令</h2></center> <br /><br /> <form id="build_form" method="post" action="/cmdrun"> <div class="form-group"> <label for="name">选择:</label> <select class="custom-select" name="sele"> <option selected></option> <option value="1">Test 1</option> <option value="2">Test 2</option> <option value="3">Test 3</option> <option value="4">ERR</option> </select> </div> <br /> <div class="form-group"> <label for="name"> 填入命令:</label> <input type="text" name="command"> <button type="submit">执行命令</button> </div> <br /> </form> <br /> {% if result_sele %} <h2>选择:</h2> <p>{{ result_sele }}</p> {% endif %} {% if result_cmd %} <h2>执行命令:</h2> <p>{{ result_cmd }}</p> {% endif %} {% if result_output %} <h2>执行过程:</h2> <p>{{ result_output }}</p> {% elif result_error %} <h2>执行错误:</h2> <p>{{ result_error }}</p> {% endif %} <br /> </div> </body> </html>
页面里的选择项,是为了演示功能。去掉也不影响命令执行
三、index.py 内容
# -*- coding: utf-8 -*- from flask import Flask from flask import render_template from flask import request import subprocess app=Flask(__name__) @app.route("/cmdweb", methods=['GET']) def cmdindex(): return render_template('index-cmd.html',**locals()) @app.route("/cmdrun", methods=['POST']) def cmdruning(): ## 获取页面选择内容 sele = request.form['sele'] if sele == '1': sele_value="Test 1" elif sele == '2': sele_value="Test 2" elif sele == '3': sele_value="Test 3" else: return f'Error gbr={sele}' ## 获取页面要执行的命令 b_cmd = request.form.get('command') ## 命令执行的路径 cmd_PATH='/tmp/flask_web' ## 执行的命令 # s_cmd = subprocess.check_output(b_cmd, shell=True, cwd=cmd_PATH) s_cmd = subprocess.run(b_cmd, shell=True, capture_output=True, text=True, cwd=cmd_PATH) ## 处理后的值,返回给页面 return render_template('index-cmd.html', result_sele=sele_value, result_cmd=b_cmd, result_output=s_cmd.stdout, result_error=s_cmd.stderr) if __name__ == '__main__': # app.debug = True # app.run(host='127.0.0.1',port = 5000) app.run(host='0.0.0.0',port = 5000)
还可以将:
def cmdindex():和 def cmdruning(): 合并详见下载包里 index_hebin.py 文件写法
四、启动服务
使用python 自带的web服务器
cd py_flask_cmd/ python3 index.py runserver 0.0.0.0:5000 或 python3 index.py runserver
代码里指定 IP和端口,启动时就不用再指定了
https://www.cnblogs.com/wutou/p/17949220
五、访问网址
六、效果
打开网页
执行命令成功
执行命令失败 (故意写错执行命令)
查看设置路径
免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。
参考、来源:
https://www.cnblogs.com/huangkenicole/p/17195715.html
https://blog.csdn.net/javascript_good/article/details/131729289 (处理post请求可以合并到一起)
https://blog.csdn.net/weixin_43867837/article/details/126953961
https://www.5axxw.com/questions/simple/0urjcm
https://www.baidu.com/s?ie=UTF-8&wd=html+input输入框&tn=98012088_21_dg&ch=8
https://blog.csdn.net/qq_26086231/article/details/131775793 (标准输出 stdout)
https://vimsky.com/examples/usage/python-subprocess.check_output-py.html (标注错误输出stderr)
https://blog.csdn.net/iTaacy/article/details/51941495 (多个参数返回)
https://blog.51cto.com/u_16099246/7505299
https://zhuanlan.zhihu.com/p/52034735 (Flask文件上传)
https://zhuanlan.zhihu.com/p/52198748 (Flask文件下载)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!