用户上传了一个 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)