Python wx(Python Card)サブプロセスの出力をウィンドウに記録
-
05-07-2019 - |
質問
similar 質問に答えますが、明確な答えをご覧ください。コマンドラインプロセスをラップするために、PythonCardを使用してシンプルなGUIを構築しています。具体的には、一連のANTタスクおよびその他のカスタム操作のラッパーであるため、開発者以外でも使用できます。
サブプロセスの出力をウィンドウ内のTextAreaにリダイレクトしたい。これを行う方法は、 subprocess.Popen(command、stdout = subprocess.PIPE)
を使用して、出力を変数にロードすることです。
質問は、サブプロセスの出力でウィンドウをどのようにライブ更新するのですか?ヒントは大歓迎です
ありがとう
解決
ラップできるすべてのサブプロセスについて、実際に端末に接続されていると信じ込ませない限り、ラップできる出力はバッファリングされますが、サブプロセスではできません。むしろ、 pexpect (疑似端末を使用できるすべてのプラットフォームで適切に実行されます。つまり、 Microsoft Windowsを除くすべてのプラットフォーム。Windowsでは、 wexpect を試すことができますが、私は後者の経験がありません)。
これらのモジュールは、生成されるとすぐにサブプロセスの出力を提供し、モジュールをだましてバッファリングなしでその出力を生成するように努めます。したがって、リアルタイムでその出力を簡単に受信して追加できるようにする必要があります更新し続けるテキストフィールド。
他のヒント
これに対する解決策も探していました。ソリューションは非常にシンプルであることがわかりました。
proc = subprocess.Popen(" whatever program&quot ;, cwd =" startup dir&quot ;, shell = True、
stdout = subprocess.PIPE、stderr = subprocess.STDOUT)
Trueの場合:
txt = proc.stdout.readline()
txtでない場合:break
txt = txt.replace(" \ r \ n"、" \ n")。replace(" \ r \ n"、" \ n")。replace(" \\"" \ ")
self.components.taStdout.appendText(txt)