Websocket实时发送子流程输出

问题描述

我有一个程序,每秒输出一个单词。我可以使用子过程执行程序,并实时显示每个单词。我想使用python websockets将数据实时发送到客户端。现在,我的代码等待整个输出打印出来,然后再通过websocket发送输出。如何更改此行为,以便它打印实时发送数据?

send.py:

import asyncio
import websockets
import subprocess
import sys
import os

async def fo(websocket,path):
        print ("socket open")
        await websocket.send("successfully connected")

        s = []
        with subprocess.Popen(['python3','-u','slow_print.py'],stdout=subprocess.PIPE,bufsize=0) as p:   
                    char = p.stdout.read(1)
                    while char != b'':  
                        s.append(char.decode('UTF-8'))
                        print(''.join(s),flush=True)
                        await websocket.send(''.join(s))
                        char = p.stdout.read(1)



start_server = websockets.serve(fo,"localhost",8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

slow_print.py:

from time import sleep
import sys

for i in range(50):
    print(str(i))
    sleep(1)

client.js

const WebSocket = require('ws');
var ws = new WebSocket('ws://localhost:8765/');

ws.onmessage = function(event) {
  console.log(event.data);
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)