我正在尝试创建一个流对象,该对象在数据写入任何时候触发回调函数。
class MonitoredStream():
def __init__(self, outstream, callback):
self.outstream = outstream
self.callback = callback
def write(self, s):
self.callback(s)
self.outstream.write(s)
def __getattr__(self, attr):
return getattr(self.outstream, attr)
当我直接调用 write 方法时,这很好用,但是当我有一个子进程的输出连接到流时,我希望它也能正常工作。例如:
def f(s):
print("Write")
p = sub.Popen(["sh", "test.sh"], stdout=MonitoredStream(sys.stdout, f))
p.communicate()
这只是将输出直接发送到 sys.stdout,完全绕过了 write 函数。有没有办法我也可以监控这个输出?