2016-10-20 7 views
0

adb logcatの出力をwx.TextAreaボックスに出力するコードがあります。このすべてがうまくいき、ボタンをクリックしてlogcatがプリントアウトされ、電話タップがあるときにプリントアウトします。作られ、すべてうまく動作します。 toolsDirとpkgNameは両方とも文字列です。stdoutからwx.TextAreaへのライブ出力

 params = [toolsDir + "\\adb.exe", "logcat"] 
     p = Popen(params, stdout=subprocess.PIPE, bufsize=1) 
     for line in p.stdout: 
      self.progressBox.AppendText(line.decode('utf-8')) 
私は、特定のアプリケーションのためのものであるログをプリントアウトするために、このコードを適応しているが、これはWindowsのFINDSTR "機能を使用して行われ

、ADB logcat | findstr myApp。下のコードは、最初は動作しますが、停止して、何が起こったか、ボタンタップされた、アプリケーションが閉じられたなど何も表示しません。 バッファのように終わりに達し、それ以上のイベントは処理されません。

 args = [toolsDir + '\\adb.exe', 'logcat'] 
     args2 = ['findstr', pkgName] 
     process_adb = subprocess.Popen(args, stdout=subprocess.PIPE, shell=False) 
     process_fs = subprocess.Popen(args2, stdin=process_adb.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) 
     for line in process_fs.stdout: 
      self.progressBox.AppendText(line.decode('utf-8')) 

アプリ名をフィルタリングするボトムコードは、リアルタイムログの出力を停止しますが、トップは表示されません。私は、あるコマンドを別のコマンドにパイプすることとは何かを推測しています。 BTW

if pkgName in line: 

+0

あなたはPythonでフィルタすることができませんか? 'pkgName in line:' – furas

+0

おそらく2番目のプロセスがEOF(ファイルの終わり)を待つでしょう。これをチェックしてください:http://stackoverflow.com/questions/9674511/python-subprocess-interaction-why-does-my-process-work-with-popen-communicate – furas

+0

いつも最も単純なこと、それはうまくいきませんでしたそのやり方!ああ、瞬間。あなたの答えを答えにするなら、私は受け入れます。 – Borgme

答えて

0

あなたが行をフィルタリングするためのPythonを使用することができ、それは、EOFのために、おそらく第二待機ため二つのプロセスに問題があることができる(ファイルの終了)または他の信号(すなわち、閉鎖管。 )が、そのstdinは、最初のプロセスからの新しいデータを待っているすべての時間開いて..です

がこれを確認してください:python-subprocess-interaction-why-does-my-process-work-with-popen-communicate

関連する問題