您如何将标准输出从子进程传递到websocket,而无需等待换行符?当前,下面的代码仅在换行符上发送标准输出。
为子进程正在运行的脚本附加的代码。是否从那里没有正确冲洗输出?
send_data.py:
import asyncio
import websockets
import subprocess
import sys
import os
async def foo(websocket, path):
print ("socket open")
await websocket.send("successfully connected")
with subprocess.Popen(['sudo','python3', '-u','inline_print.py'],stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=0, universal_newlines=True) as p:
for line in p.stdout:
line = str(line.rstrip())
await websocket.send(line)
p.stdout.flush()
for line in p.stderr:
line = str(line.rstrip())
await websocket.send(line)
p.stdout.flush()
start_server = websockets.serve(foo, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
inline_print.py:
from time import sleep
import sys
loading = 'LOADING...LOADING...LOADING...LOADING...LOADING...'
for i in range(50):
print(loading[i], sep='', end=' ', flush=True)
sleep(0.1)
如果end=' '
更改为end='\n'
,则实时发生send_data.py
的标准输出。
js客户端:
var ws = new WebSocket('ws://localhost:8765/');
ws.onmessage = function(event) {
console.log(event.data);
};
我承认这个问题与以下类似:
catching-stdout-in-realtime-from-subprocess
how-do-i-get-real-time-information-back-from-a-subprocess-popen-in-python-2-5
intercepting-stdout-of-a-subprocess-while-it-is-running
然而,如果没有子流程中的换行符,所有解决方案都无法使用。
您如何将标准输出从子进程传递到websocket,而无需等待换行符?当前,下面的代码仅在换行符上发送标准输出。 ...
如果写