2017-06-04 10 views
0

私は、何か起きたときにいつでも端末にエラーを記録するUnix実行可能ファイルを介してPERFORCEサーバを管理しています。私がしたいのはPythonを使って実行可能ファイルを起動し、それが実行中のアプリケーションから端末ウィンドウに記録されているエラーを監視するようにすることです。サブプロセスと障害のトラック・エラー

次のコードは実行時に動作しますが、何らかの形式のコールバックを介して端末にログインしたときにサブプロセスからデータを取得する方法がわかりません。

答えて

1

私は通常、このよう

from subprocess import Popen, PIPE 
proc = Popen(["./p4d"], stdout=PIPE, stderr=PIPE) 
out, err = pipe.communicate() 

pipe.communicate(それを行うには)、プロセスが終了するまでハングアップして、stdoutとstderr

+0

このログにはエラーが発生するか、プロセスが終了するとエラーが発生しますか? –

+0

すべてのログを取得できますが、プロセスが終了すると一度だけ終了します。プロセスが実行されている間にstdout/stderrを読むのはやや難解です。 –

+1

https://stackoverflow.com/questions/2804543/read-subprocess-stdout-line-by-lineが役立つ可能性があります –

0

process.stdoutprocess.stdoutはファイルライクオブジェクトで返しますあなたはそれを読むことができます。事がstdoutに記録されていると仮定します。

proc = Popen(['./p4d'], stdout=PIPE, encoding='utf-8') # Or whatever encoding suits 
for line in proc.stdout: 
    # Note that line will end in `\n`, unless it is the last line. 
    line = line.rstrip('\n') 

    # Do something depending on the line