私はpythonでstdoutの読み方に問題があります。私は何をしようとしているのか少し説明しなければならない。別のプログラムのあるプログラムからstdoutを読み込む
私はPythonプログラム(foo)を持っています。これは第2のpythonプログラム(bar)を呼び出します。 バーは、ステータス出力の詳細やログに記録されるその他の情報を返します。 fooはこれを読まなければなりません。原理的には機能します。 バーの出力を取得して問題なくログファイルに送信できます。問題は、出力のあるフレーズをバー(ステータスレポート)から探すときに始まります。
私はos.read(FN、n)はバーの標準出力からで出力を読んでいます。問題は、os.readはnバイトを読み取りますが、行は読み取れません。それは多かれ少なかれ可能性があります。私はそれがバーによって標準出力に書き込まれているすべての行を読みたい、これらの行は\ nで終わると、どちらかsys.stdout.flush続い印刷またはとsys.stdout.write(と書かれています)。使用バー呼び出す
fooが:
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()
私のコードは、現時点ではこのようになります。 バーは書き込み:
int_logFile.write(buf)
int_logFile.flush()
すべてがうまくている:私は
buf = os.read(fd_in[0], 256)
でfooのに読んでいます
print 'TAG INFO1 INFO2 INFO3'
#or
sys.stdout.write('TAG INFO1 INFO2 INFO3\n')
sys.stdout.flush()
私はとのログファイルにこれを書いたとき。私はこのような出力行の最初の単語つかむしたいなら:
tokens = buf.strip('\n').split(' ')
を私はタグを得ることはありませんので、私は、misseryで終わるが、私はINFOXまたは実行する前の出力何から何かを持っているかもしれません私のステータスメッセージ。
これを要約すると、バーの行をfooに読み込む必要があります。何か案は???
bar.communicateを試しましたか? – spicavigo