在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方法来控制每次循环的间隔时间,以实现实时输出的效果

approutestart methods=POSTdef start global process if process return jsonifymessage Command already running process = subprocessPopeniperf3 -s -p11111 stdout=subprocessPIPE universal_n

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

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