修改后的代码如下:

import subprocess
import time

from flask import Flask, render_template, request, jsonify
from flask_socketio import SocketIO

app = Flask(__name__, template_folder='D:\\python\\webping')
app.config['SECRET_KEY'] = 'secret_key'
socketio = SocketIO(app)

process = None


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/start', methods=['POST'])
def start():
    global process
    if process:
        return jsonify({'message': 'Command already running.'})

    host = request.form.get('host')  # 获取输入的主机地址
    port = request.form.get('port')  # 获取输入的端口号

    process = subprocess.Popen(['iperf3', '-c', host, '-p', port, '-i', '1'], stdout=subprocess.PIPE, universal_newlines=True)

    def stream():
        i = 0
        while process and process.poll() is None:
            output = process.stdout.readline().strip()
            if len(output) > 0:
                i += 1
                print(i, output)

                socketio.emit('stream_output', output)
                # time.sleep(0.1)

    socketio.start_background_task(stream)
    return jsonify({'message': 'Command started.'})


@app.route('/stop', methods=['POST'])
def stop():
    global process
    if process:
        process.terminate()
        process = None
        return jsonify({'message': 'Command stopped.'})
    else:
        return jsonify({'message': 'No command running.'})


if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', port=5000, debug=False, allow_unsafe_werkzeug=True)

在上面的代码中,我们从request.form中获取了hostport的值,这是由index.html的表单提交的数据。然后将这些值作为参数传递给subprocess.Popen函数来启动iperf3命令

import subprocessimport timefrom flask import Flask render_template request jsonifyfrom flask_socketio import SocketIOapp = Flask__name__ template_folder=DpythonwebpingappconfigSECRET_KEY = secret_key

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

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