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:
:
あなたはPythonでフィルタすることができませんか? 'pkgName in line:' – furas
おそらく2番目のプロセスがEOF(ファイルの終わり)を待つでしょう。これをチェックしてください:http://stackoverflow.com/questions/9674511/python-subprocess-interaction-why-does-my-process-work-with-popen-communicate – furas
いつも最も単純なこと、それはうまくいきませんでしたそのやり方!ああ、瞬間。あなたの答えを答えにするなら、私は受け入れます。 – Borgme