【发布时间】:2019-12-23 18:22:03
【问题描述】:
用户上传了一个我需要在我的服务器上执行的 python 文件,并发送回通过 WebSocket 创建的标准输出。执行的 python 文件将运行几分钟,我需要通过套接字返回标准输出,因为它们是实时“打印”出来的,而不是在脚本完成时。
我尝试过使用:Python. Redirect stdout to a socket,但这不是 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()
这是我正在使用的python 测试脚本:
from time import sleep
for i in range(40):
print(i)
sleep(0.1)
【问题讨论】:
-
你不能创建一个类似文件的对象,给它设置
sys.stdout,然后重写write函数来发送数据吗? -
@בנימיןכהן 我该怎么做呢?这听起来确实像一个解决方案
标签: python websocket subprocess stdout