approutestart methods=POSTdef start global process if process return jsonifymessage Command already running process = subprocessPopeniperf3 -s -p11111 stdout=subprocessPIPE universal_n
在stream函数中,可以使用iter函数来逐行读取输出并进行处理。同时,可以使用socketio.sleep方法来控制每次循环的间隔时间,以实现实时输出的效果。以下是修改后的代码示例:
@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方法来控制每次循环的间隔时间,以实现实时输出的效果
原文地址: http://www.cveoy.top/t/topic/iSGG 著作权归作者所有。请勿转载和采集!