import subprocessimport timefrom flask import Flask render_template request jsonifyfrom flask_socketio import SocketIOapp = Flask__name__ template_folder=DpythonwebpingappconfigSECRET_KEY = secret_key
修改后的代码如下:
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中获取了host和port的值,这是由index.html的表单提交的数据。然后将这些值作为参数传递给subprocess.Popen函数来启动iperf3命令
原文地址: http://www.cveoy.top/t/topic/iSMe 著作权归作者所有。请勿转载和采集!