概要
subprocess
モジュールを使って子プロセスを作ることはあるかと思いますが,例えばそいつのログを監視するみたいなことをしたくなることがあると思うので,メモ.
子プロセス
0.5秒ごとに数字を標準出力します.
child.py
import time
import sys
i = 0
while True:
print i
sys.stdout.flush()
i += 1
time.sleep(0.5)
ポイントはflush()
してバッファに溜まったデータを吐き出すところです.
親プロセス
子が出力したらその都度出力します.
parent.py
import subprocess
proc = subprocess.Popen(['python','child.py'],stdout=subprocess.PIPE)
print "ready"
for line in iter(proc.stdout.readline,''):
print line
結果
ready
1
2
3
4
5
(以下略)
子プロセスから読み込む部分はスレッドを作って非同期で読み込んでデータをキューに入れるとかしたら色々できそうです.