小编sid*_*999的帖子

如何通过 WebSocket 发送长时间运行的 Python 脚本的输出?

用户上传了一个 python 文件,我需要在服务器上执行该文件,并发回通过 WebSocket 创建的标准输出。执行的 python 文件将运行几分钟,我需要通过套接字返回标准输出,因为它们是实时“打印”出来的,而不是在脚本完成时。

我尝试过使用:Python。将 stdout 重定向到套接字,但这不是 WebSocket,我的 React 前端无法成功连接到它。(如果你能解决这个问题,那也能解决我的问题)

我也尝试过使用websocketd,但由于我无法sys.stdout.flush()在每个用户添加的打印语句之后添加,所以它不能解决我的问题。

我也尝试过使用子进程的 PIPE 功能,但也有相同的刷新问题

async def time(websocket, path):
    while True:
        data = "test"
        await websocket.send(data)
        # Run subprocess to execute python file in here
        # sys.stdout => websocket.send             

start_server = websockets.serve(time, "127.0.0.1", 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Run Code Online (Sandbox Code Playgroud)

这是python我正在使用的测试脚本:

async def time(websocket, path):
    while True:
        data = "test"
        await websocket.send(data)
        # Run subprocess to execute python file in here
        # sys.stdout => …
Run Code Online (Sandbox Code Playgroud)

python subprocess stdout websocket

4
推荐指数
1
解决办法
3768
查看次数

标签 统计

python ×1

stdout ×1

subprocess ×1

websocket ×1