python - あるプログラムから別のプログラムでstdoutを読み取る

python stdout stdin

Pythonでの標準出力の読み取りに問題があります。私がやろうとしていることを少し説明しなければなりません。

私はPythonプログラム(foo)を持っています。これは2番目のpythonプログラム(バー)を呼び出します。 barはstdoutステータスの詳細とログに記録されるその他の情報を返します。 fooはこれを読む必要があります。原則として機能します。 barの出力を取得して、ログファイルに問題なく送信できます。問題は、barからの出力(ステータスレポート)で特定のフレーズを検索しようとすると始まります。

バーの標準出力からos.read(fn、n)で出力を読み取っています。問題は、os.readがnバイトを読み取るが、行は読み取らないことです。それは多かれ少なかれすることができます。 stdoutにバーで書き込まれるすべての行を読み取りたいのですが、これらの行は\ nで終わり、printまたはsys.stdout.writeの後にsys.stdout.flush()が続いて書き込まれます。

fooは以下を使用してbarを呼び出します。

bar= subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
fd_in[0] = bar.stdout.fileno()
fd_in[1] = bar.stderr.fileno()


私のコードは現時点では次のようになります。バー書き込み:

print 'TAG INFO1 INFO2 INFO3'
#or
sys.stdout.write('TAG INFO1 INFO2 INFO3\n')
sys.stdout.flush()


私はfooで読んでいます

buf = os.read(fd_in[0], 256)


これをログファイルに書き込むと、次のようになります。

int_logFile.write(buf)
int_logFile.flush()


すべて順調。しかし、次のように出力行の最初の単語を取得したい場合:

tokens = buf.strip('\n').split(' ')


TAGを取得できないため、結局失敗に終わりますが、INFOxまたは以前の出力からの何かがステータスメッセージとは関係ない可能性があります。

要約すると、fooのバーの出力を1行ずつ読み取る必要があります。何か案は???
答え
えっと、bar.stdout.readline()?ファイル記述子に至るまで、ほとんど必要ありません。
関連記事

python - Pythonで数値を分割する方法の数

python - pythonはhtmlフォームからファイルを受け取ります

python - PyDevを使用してPythonで変数アクセスにブレークポイントを設定する方法はありますか?

python - ターゲット関数が完了した後にPythonスレッドが確実に終了するようにするにはどうすればよいですか?

python - django / python:複数のテーブルを持つ生のSQL

python - ブレンダーは頂点ごとのUV座標をエクスポートできますか?

python - Pythonのインタラクティブ(注釈付き)チャート[終了]

python - Makoマクロのオプションとして「クラス」を使用する

python - 「pip install」と「setup.py install」での最大再帰[終了]

python - ウェルカムテキストを表示するにはどうすればよいですか?