Python Flask Web Ping 工具 - 使用 SocketIO 实时显示 Ping 结果
使用 Flask 和 SocketIO 创建一个简单的 Web Ping 工具
本代码演示了如何使用 Flask 和 SocketIO 创建一个简单的 Web Ping 工具,实时显示 Ping 命令的输出结果。
后端代码 (server.py)
import subprocess
from flask import Flask, render_template, request, jsonify, make_response
from flask_socketio import SocketIO, emit
app = Flask(__name__, template_folder='C:\Users\zh\PycharmProjects\webping\')
socketio = SocketIO(app, async_mode='eventlet') # 添加async_mode参数
process = None
@app.route('/')
def index():
return render_template('index.html')
@app.route('/execute', methods=['POST'])
def execute():
global process
if request.form['action'] == 'start':
if process is not None and process.poll() is None:
return jsonify({'output': '进程正在运行,请先停止'})
process = subprocess.Popen(['ping', '1.1.1.1', '-t'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
output = process.stdout.readline()
if output == b'' and process.poll() is not None:
break
if output:
output_text = output.decode('gbk').strip()
print(output_text)
emit('ping_output', {'output': output_text})
return jsonify({'output': '命令已执行'})
elif request.form['action'] == 'stop':
if process is not None and process.poll() is None:
process.terminate()
process.wait()
process = None
return jsonify({'output': '进程已停止'})
else:
return make_response(jsonify({'error': '无效的动作'}), 400)
if __name__ == '__main__':
# socketio.run(app, debug=True)
socketio.run(app, debug=True,allow_unsafe_werkzeug=True)
前端代码 (index.html)
<!DOCTYPE html>
<html>
<head>
<title>Web Ping</title>
<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js'></script>
<script src='https://code.jquery.com/jquery-3.5.1.min.js'></script>
</head>
<body>
<h1>Web Ping</h1>
<button id='start-btn' onclick='startPing()'>Start</button>
<button id='stop-btn' onclick='stopPing()'>Stop</button>
<div id='output-div'></div>
<script>
var socket = io.connect();
// 监听来自后端的ping_output事件
socket.on('ping_output', function(data) {
// 将输出内容追加到output-div中
$('#output-div').append('<p>' + data.output + '</p>');
});
function startPing() {
// 发送POST请求给后端,执行ping命令
$.post('/execute', {action: 'start'}, function(response) {
console.log(response.output);
});
}
function stopPing() {
// 发送POST请求给后端,停止ping命令
$.post('/execute', {action: 'stop'}, function(response) {
console.log(response.output);
});
}
</script>
</body>
</html>
运行程序
- 确保已安装 Flask 和 SocketIO 库。
- 将上述代码保存为
server.py和index.html文件,并放在同一目录下。 - 运行
server.py文件。 - 在浏览器中打开
http://localhost:5000。 - 点击“Start”按钮开始 Ping,点击“Stop”按钮停止 Ping。
注意事项
- 此代码使用了
eventlet库作为异步模式,确保已安装eventlet库。 - 代码中使用了
gbk编码解码 Ping 命令的输出,根据实际情况调整编码。 - 可以根据需求修改 Ping 的目标地址和参数。
代码功能解析
- Flask 框架提供 Web 服务器和路由功能。
- SocketIO 库实现实时通信,将 Ping 命令的输出实时显示到网页上。
subprocess模块用于执行系统命令,这里使用ping命令。- 前端代码使用 jQuery 发送 POST 请求给后端,并使用 SocketIO 监听来自后端的输出。
总结
本代码示例演示了如何使用 Flask 和 SocketIO 创建一个简单的 Web Ping 工具,实时显示 Ping 命令的输出结果。通过使用 SocketIO,我们可以实现实时数据交互,增强用户体验。
希望本代码示例对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/qyx2 著作权归作者所有。请勿转载和采集!