2016-06-30 16 views
0

私は約15分かかるコマンドを実行している、私はfetchPipe.communicateを介して出力をキャプチャし、それを印刷します。 Pythonで出力を標準出力に出力してキャプチャする方法はありますか?は、出力を標準出力に出力してキャプチャする方法もありますか?

fetchPipe = subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    (output, error) = fetchPipe.communicate() 
+0

あなたはすでにどのように記述しましたか? – Natecat

+0

Natecat - 私が説明したのは 'output'変数に取り込み、コマンドを実行して' output'変数にキャプチャするときに出力をstdoutに出力したいのですが、私は両方をしたいです –

答えて

2

はい。そのための例では、リスナー関数を使用することができますstdoutに書き込みやライン上に何かをトリガ

import sys 
import subprocess 
import threading 

受け取るリスナーに

def listener(proc): 
    for line in proc.stdout: 
     sys.stdout.write(line) 
     triggerRecvLine(line) 
    proc.wait() 

を別のスレッドでリスナーを実行するのが賢明かもしれません。

proc=subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
t = threading.Thread(target=listener, args=(proc,)) 
t.start() 
+0

スレッディングは、 ? –

+0

スレッドなしで関数を呼び出すことができます。親プロセスをブロックしますが – bardavid

+0

'グローバル名 'triggerRecvLine'が定義されていません。 –

関連する問題