0

Python スクリプトから C++ で記述された実行可能ファイル (A) の出力を読み込もうとしています。私はLinuxで働いています。私がこれまでに知っている唯一の方法は、サブプロセス ライブラリを使用することです

まずはやってみた

p = Popen(['executable', '-arg_flag1', arg1 ...], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
print "reach here"
stdout_output = p.communicate()[0]
print stdout_output
sys.stdin.read(1)

私の実行可能ファイル(99%のCPU使用率)と私のスクリプトの両方をハングアップさせることが判明しました:S:S:Sさらに、ここに到達すると出力されます。

その後、私は試しました:

f = open ("out.txt",  'r+')
command = 'executable -arg_flag1 arg1 ... '
subprocess.call(command,  shell=True, stdout=f)
f.seek(0)
content = f.read()

これは機能しますが、コンテンツの最後の文字が繰り返されるか、予想よりも多くの値が生成される出力が得られます:S

とにかく、誰かがこれを行うためのより適切な方法を教えてくれますか?

前もって感謝します

4

1 に答える 1

0

最初の解決策が最適です。shell=True を使用すると遅くなり、セキュリティ上の問題があります。

問題は、Popen がプロセスの完了を待たないことです。そのため、Python は stdout、stdin、および stderr なしでプロセスを離れることを停止します。そのプロセスを暴走させる。p.wait() を追加するとうまくいくはずです!

また、通信を使用することは時間の損失です。stdout_output = p.stdout.read() を実行するだけです。ただし、 stdout_output に何かが含まれているかどうかを自分で確認する必要がありますが、これは communicate()[0] を使用するよりも優れています。

于 2013-09-23T19:43:50.373 に答える