システムプロセスを実行し、出力をインターセプトし、Pythonスクリプトで行ごとにリアルタイムで変更したいと思います。Pythonの別のプロセスからのstdoutのリアルタイムインターセプト
印刷前に完了するために、プロセスを待ち私の最高の試み、次のとおりです。
#!/usr/bin/env python
import subprocess
cmd = "waitsome.py"
proc = subprocess.Popen(cmd, shell=True, bufsize=256, stdout=subprocess.PIPE)
for line in proc.stdout:
print ">>> " + line.rstrip()
スクリプトwaitsome.py
は単に半秒毎の行を出力します。
#!/usr/bin/env python
import time
from sys import stdout
print "Starting"
for i in range(0,20):
time.sleep(0.5)
print "Hello, iteration", i
stdout.flush()
は使いやすいがありますソリューションをsubprocess
にリアルタイムで出力を反復できるようにするには?スレッドを使用する必要がありますか?
は昔、私はPerlでスクリプト、これはケーキの一部だった:ファイルの上にループ
open(CMD, "waitsome.py |");
while (<CMD>) {
print ">>> $_";
}
close(CMD);
重複:http://stackoverflow.com/search?q=%5Bpython%5D+subprocess+real-time、特にhttp://stackoverflow.com/questions/527197/intercepting-stdoutとしてalledサブプロセス中に実行中です。http://stackoverflow.com/questions/803265/getting-realtime-output-using-subprocess –
申し訳ありませんが、私は最初のものだけを見て、それを理解しました。 *サブプロセスの*バッファリングに関する問題であり、親のPythonスクリプトの問題ではありません。 –