行ごとにサブプロセスstdoutを読み取る
私のpythonスクリプトはサブプロセスを使用して、非常にうるさいlinuxユーティリティを呼び出します。すべての出力をログファイルに保存し、その一部をユーザーに表示します。次の方法でうまくいくと思いましたが、ユーティリティが大量の出力を生成するまで、出力はアプリケーションに表示されません。 #fake_utility.py, just generates lots of output over time import time i = 0 while True: print hex(i)*512 i += 1 time.sleep(0.5) #filters output import subprocess proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE) for line in proc.stdout: #the real code does filtering here print "test:", line.rstrip() 私が本当に望んでいる動作は、フィルタースクリプトがサブプロセスから受け取った各行を出力することです。Sortaは何をするのかteeが好きですが、Pythonコードを使用しています。 何が欠けていますか?これは可能ですか? 更新: a sys.stdout.flush()がfake_utility.pyに追加された場合、コードはPython 3.1で望ましい動作をします。Python 2.6を使用しています。を使用proc.stdout.xreadlines()するとpy3kと同じように機能すると思いますが、そうではありません。 アップデート2: …