Web Ping: 使用 Flask 和 SocketIO 实现实时 Ping 命令执行
<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 <script src=/'//cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js/'></script>//n </head>//n <body>//n <h1>Web Ping</h1>//n <div id=/'output/'></div>//n <form id=/'pingForm/'>//n <input type=/'submit/' name=/'action/' value=/'start/'>//n <input type=/'submit/' name=/'action/' value=/'stop/'>//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>
原文地址: https://www.cveoy.top/t/topic/qyx7 著作权归作者所有。请勿转载和采集!