使用os.popen()监控Python脚本输出时运行一段时间后失效的问题求助
使用os.popen()监控Python脚本输出时运行一段时间后失效的问题求助
大家好,我遇到了一个困扰我挺久的问题,希望能得到各位大佬的帮助。
我先写了一个Python脚本script1.py,它的核心逻辑很简单,就是持续循环检查是否有任务,若存在则打印任务流程相关信息,代码大致如下:
while True: if hasTask: print('task flow info print')
之后我又编写了监控脚本monitor.py,打算通过os.popen()来捕获script1.py的控制台输出,当读取到特定内容时,将消息发送到Redis频道中。具体代码如下:
import os import re import redis import json redis_key = "command" cmd = "python script1.py" pool = redis.ConnectionPool(host="127.0.0.1") r = redis.Redis(connection_pool=pool) command_info = {} # 补充原代码中未显式定义的字典 with os.popen(cmd,"r") as stream: while True: buf = stream.readline().strip() if re.match("target",buf) is not None: message = stream.readline().strip() command_info["command"] = message r.publish(redis_key, json.dumps(command_info))
一开始这套组合运行得很正常,monitor.py能准确读取script1.py的输出,也能成功往Redis频道发送消息。但运行一段时间后,整个流程就突然失效了,再也没有消息发送到Redis里了。
我想请教各位:这种情况可能是什么原因导致的?会不会是os.popen()返回的文件对象缓存堆积过大?或者有没有什么可行的解决办法?麻烦大家帮忙分析一下,非常感谢!
备注:内容来源于stack exchange,提问作者yuan yao
相关产品推荐
相关产品推荐

