2009-05-28 8 views
7

私はPythonでプログラムを書こうとしており、.exeファイルを実行するように言われています。この.exeファイルを実行すると、大量のデータが吐き出され、特定の行が画面に表示される必要があります。私はかなり私がsubprocess.popenか何かを使用する必要があると確信していますが、私はサブプロセスに新しいとヒントを持っていません。誰でも簡単に私にこれをさせることができますか?ありがとう!!子プロセスの標準出力をキャプチャするにはどうすればよいですか?

答えて

17

このような何か:あなたは、プロセスの実行が完了した後に出力を印刷するに興味がある場合パオロのソリューション@

import subprocess 
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE) 
result = process.communicate()[0] 
+0

どのように特定の行を読みますか? 0はどこですか? はい、私はプロセスの終了後に出力を印刷することに興味があります。 また、 "yourcommand"を持っている場所にexe拡張がありますか? – Tyler

+1

"result"は "yourcommand"の出力全体になります。その文字列(またはPy3.0のバイトオブジェクト)を処理して、探している行を見つけることができます。 –

+3

[0]は返されたタプルの最初の要素を意味します(stdout、stderr)。結果を文字列で処理して、好きなようにすることができます(例:特定の行を見つける。 "yourcommand"は完全なコマンドです。* path *でない場合(少なくとも* nixの場合)、コマンドの絶対パスになります。 – miku

23

は完璧です。プロセスが実行されている間に出力をポーリングする場合は、次のようにしなければなりません。

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 

while True: 
    out = process.stdout.readline(1) 
    if out == '' and process.poll() != None: 
     break 
    if out.startswith('myline'): 
     sys.stdout.write(out) 
     sys.stdout.flush()