首页 > 系统相关 >Python flask 网页版执行shell命令并返回结果['GET', 'POST'] 混合方式

Python flask 网页版执行shell命令并返回结果['GET', 'POST'] 混合方式

时间:2024-01-05 18:13:21浏览次数:40  
标签:__ index shell Python sele cmd flask result

前言全局说明

Python flask 网页版执行shell命令并返回结果


一、需要安装的库

pip3 install flask -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

二、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和端口,启动时就不用再指定了


五、访问网址

http://127.0.0.1:5000/cmdrun


六、效果

打开网页

image


执行命令成功

image


执行命令失败 (故意写错执行命令)

image


查看设置路径

image



免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:



标签:__,index,shell,Python,sele,cmd,flask,result
From: https://www.cnblogs.com/wutou/p/17947594

相关文章

  • optical strain(python)
    利用pythonopencv计算opticalstrainimportcv2importnumpyasnpclassOptFlowStrain:def__init__(self):self.TVL1=cv2.optflow.DualTVL1OpticalFlow_create()defrun(self,img0,img1):returnself.cal_opt_flow(img0,img1)def......
  • 在Python程序中读取和写入文件的方法
    在Python编程中,读取和写入文件是常见的操作。本文将介绍几种常用的方法来实现在Python程序中读取和写入文件。1.使用open()函数Python提供了内置的open()函数,可以用于打开一个文件,并返回一个文件对象,从而进行文件的读取和写入操作。open()函数接受两个参数:文件名和打开模式。示例代......
  • 使用Python爬取大麦网演出商品评论的方法
    在网络时代,用户对于商品的评论和评价是非常重要的参考依据。本文将介绍如何使用Python来爬取大麦网演出商品评论,以获取用户对演出的反馈和评价。1.确定目标页面首先,我们需要确定要爬取评论的目标页面。在大麦网上,每个演出商品都有一个唯一的商品ID,通过拼接URL可以访问到该商品的评......
  • Python中的"e"表示什么意思
    在Python编程语言中,"%e"是一种格式化字符串的方式,用于将浮点数按指数形式输出。本文将详细介绍"%e"的使用方法以及示例。1."%e"格式化字符串的语法在Python中,可以使用"%e"来定义一个格式化字符串,用于将浮点数按指数形式输出。其语法如下:```python"%e"%value```其中,`%e`表示将浮点......
  • Python中的"%s"表示什么意思
    在Python编程语言中,"%s"是一种格式化字符串的方式,用于将字符串按照指定格式输出。本文将详细介绍"%s"的使用方法以及示例。1."%s"格式化字符串的语法在Python中,可以使用"%s"来定义一个格式化字符串,用于将字符串按照指定格式输出。其语法如下:```python"%s"%value```其中,`%s`表示将......
  • 【多进程】python多进程CPU密集型任务的进程数选择
    实验思路从1加到100000000,分别用单进程,多进程方案去做。实验代码frommultiprocessingimportPool,Process,Queueimportos,time,randomdeftest_func(left,right):res=0foriinrange(left,right):res+=ireturnresdefjoin(q):......
  • python学习----编程题02
    题目:企业发放的奖金根据利润提成。利润(0)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成540万60万之间时高于40万元的部分,可提成3%60万到100万之间时,高于60......
  • opencv库图像基础3直方图-python
    opencv库图像基础3直方图-python直方图是什么OpenCV中的直方图是图像中像素值分布情况的统计表示。它是图像空间域内像素值分布的图形表示,以便更好地理解颜色分布。灰度直方图是图像中每个像素灰度值出现的次数或频数的统计结果。它只反映该图像中灰度值出现的频率,而未反映某......
  • Python - 列表切片 与 深拷贝、浅拷贝
    1.列表list常用的方法:lst=[1,2,3]#append(new_item)方法相当于在列表末尾追加一个元素,相当于lst[len:]=new_itemlst.append(4)print(lst)#extend(iterable)方法,将iterable中的每个元素逐个添加到列表中,#相当于lst[len:len+len(iterable)]=iterablelst.e......
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战
    本文主要介绍了Python+Requess+PyTest+Excel+Allure接口自动化测试实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit......