<p>///'import subprocess//nfrom flask import Flask, render_template, request, jsonify, make_response//nfrom flask_socketio import SocketIO, emit//n//napp = Flask(<strong>name</strong>, template_folder='templates')//nsocketio = SocketIO(app, async_mode='eventlet')  # 添加async_mode参数//nprocess = None//n//n@app.route('/')//ndef index()://n    return render_template('index.html')//n//n@app.route('/execute', methods=['POST'])//ndef execute()://n    global process//n    if request.form['action'] == 'start'://n        if process is not None and process.poll() is None://n            return jsonify({'output': '进程正在运行,请先停止'})//n        process = subprocess.Popen(['ping', '1.1.1.1', '-t'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)//n        while True://n            output = process.stdout.readline()//n            if output == b'' and process.poll() is not None://n                break//n            if output://n                output_text = output.decode('gbk').strip()//n                print(output_text)//n                socketio.emit('ping_output', {'output': output_text})  # 修改为使用socketio.emit发送数据//n        return jsonify({'output': '命令已执行'})//n    elif request.form['action'] == 'stop'://n        if process is not None and process.poll() is None://n            process.terminate()//n            process.wait()//n            process = None//n        return jsonify({'output': '进程已停止'})//n    else://n        return make_response(jsonify({'error': '无效的动作'}), 400)//n//nif <strong>name</strong> == '<strong>main</strong>'://n    socketio.run(app, debug=True)//n//n<!DOCTYPE html>//n<html>//n  <head>//n    <title>Web Ping</title>//n    &lt;script src=/'//cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js/'&gt;</script>//n  </head>//n  <body>//n    <h1>Web Ping</h1>//n    &lt;div id=/'output/'&gt;</div>//n    &lt;form id=/'pingForm/'&gt;//n      &lt;input type=/'submit/' name=/'action/' value=/'start/'&gt;//n      &lt;input type=/'submit/' name=/'action/' value=/'stop/'&gt;//n    </form>//n    <script>//n      var socket = io();//n//n      socket.on('ping_output', function(data) {//n        var outputDiv = document.getElementById('output');//n        outputDiv.innerHTML += '<p>' + data.output + '</p>';//n      });//n//n      document.getElementById('pingForm').addEventListener('submit', function(e) {//n        e.preventDefault();//n        var formData = new FormData(this);//n        var xhr = new XMLHttpRequest();//n//n        xhr.onreadystatechange = function() {//n          if (xhr.readyState === XMLHttpRequest.DONE) {//n            var response = JSON.parse(xhr.responseText);//n            if (response.output) {//n              var outputDiv = document.getElementById('output');//n              outputDiv.innerHTML += '<p>' + response.output + '</p>';//n            } //n          }//n        };//n//n        xhr.open('POST', '/execute');//n        xhr.send(formData);//n      });//n    </script>//n  </body>//n</html>//n/</p>
Web Ping: 使用 Flask 和 SocketIO 实现实时 Ping 命令执行

原文地址: https://www.cveoy.top/t/topic/qyx7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录