データが書き込まれるたびにコールバック関数をトリガーするストリーム オブジェクトを作成しようとしています。
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)
これは、書き込みメソッドを直接呼び出すと正常に機能しますが、サブプロセスの出力をストリームにフックしている場合にも機能するようにしたいと考えています。例えば:
def f(s):
print("Write")
p = sub.Popen(["sh", "test.sh"], stdout=MonitoredStream(sys.stdout, f))
p.communicate()
これは、出力を sys.stdout に直接送信し、書き込み関数を完全にバイパスします。この出力も監視できる方法はありますか?