nod*_*ata 10 python rest websocket
这是我的问题,部分解决,但不是我认为最好的方式.我有一个REST API服务器,它有一个只执行批处理的POST方法.该方法立即返回200(没有任何正文),批处理继续在服务器中执行其任务.这个批处理过程有一个日志文件,我通常在网上看到tail -f mylogfile.log.我现在想要的是使用websocket服务器将尾部进程的输出发送到网页.websocket服务器的代码如下所示:
import os
import asyncio
import websockets
import subprocess
from frontserv.start_server import WEBSOCKET_INTERCHANGE_FILE
async def main(websocket, path):
print("-> STARTING")
exists = os.path.isfile(WEBSOCKET_INTERCHANGE_FILE)
if not exists:
f = open(WEBSOCKET_INTERCHANGE_FILE, "w+")
f.close()
exe = ["tail", "-f", WEBSOCKET_INTERCHANGE_FILE]
message = ""
p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=None)
while True:
retcode = p.poll()
print(message)
message = message + p.stdout.readline().decode("utf-8") + "<br>"
await websocket.send(message)
await asyncio.sleep(0.1)
start_server = websockets.serve(main, '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)
我可以访问批处理代码,我认为有更好的方法来解决这个问题.如果不是记录到文件,我可以向websocket服务器发送消息以向浏览器发送消息,我认为这将是一个更好的实现.
最好的祝福!
如果您只想通过 websockets 将进程的输出发送到客户端,我建议您查看websocketd
你只需告诉它一个要监听的端口和一个要运行的命令
$ websocketd --port=8080 my-program
Run Code Online (Sandbox Code Playgroud)
当客户端连接时它将运行命令并向其提供输出。
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |