Flask 应用中使用 iperf3 实时输出结果
@app.route('/start', methods=['POST']) def start(): global process if process: return jsonify({'message': 'Command already running.'})
process = subprocess.Popen(['iperf3', '-s', '-p11111'], stdout=subprocess.PIPE, universal_newlines=True)
def stream():
i = 0
for line in iter(process.stdout.readline, ''):
output = line.strip()
i += 1
print(i, output)
socketio.emit('stream_output', output)
socketio.sleep(0.1) # 控制每次循环的间隔时间,单位为秒
socketio.start_background_task(stream)
return jsonify({'message': 'Command started.'})
在上述代码中,我们使用iter函数来创建一个可迭代对象,它会不断地调用process.stdout.readline方法来读取输出的每一行。当process.stdout.readline返回空字符串时,表示输出已经结束,循环结束。在每次循环中,我们通过socketio.emit方法将输出发送给客户端,并使用socketio.sleep方法来控制每次循环的间隔时间,以实现实时输出的效果。
原文地址: https://www.cveoy.top/t/topic/qyFk 著作权归作者所有。请勿转载和采集!