1

これと同様の 質問がありますが、明確な回答が欲しいです。コマンド ライン プロセスをラップするために、PythonCard を使用して単純な GUI を作成しています。具体的には、一連の ANT タスクおよびその他のカスタム操作のラッパーであるため、非開発者が使用できます。

サブプロセスの出力をウィンドウの TextArea にリダイレクトしたいと思います。これを行う方法はsubprocess.Popen(command, stdout=subprocess.PIPE)、出力を使用して変数にロードすることのようです。

問題は、サブプロセスの出力でウィンドウをライブ更新するにはどうすればよいですか? どんなヒントでも大歓迎です

ありがとう

4

2 に答える 2

1

ラップできるほぼすべてのサブプロセスは、実際に端末に接続されていると信じ込まない限り、出力をバッファリングします。サブプロセスはそれを実行できません。むしろ、pexpectを調べてください(疑似端末を使用できるすべてのプラットフォーム、つまりMicrosoft Windowsを除くすべてのプラットフォームで正常に動作します。Windowsではwexpectを試すことができますが、後者の経験はありません)。

これらのモジュールは、サブプロセスの出力が生成されるとすぐに提供され、モジュールをだましてその出力をバッファリングせずにできるだけ早く生成するように努めます。そのため、リアルタイムでその出力を受信して​​テキストフィールドに追加するのが簡単になります。更新を続けたい。

于 2009-07-29T14:29:38.357 に答える
1

私もこれの解決策を探していました。ソリューションは非常に単純であることがわかります。

proc = subprocess.Popen("whatever program", cwd="startup dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
while True:
txt = proc.stdout.readline()
if not txt: break
txt=txt.replace("\r\n","\n").replace("\r\n","\n").replace("\\","\")
self.components. taStdout.appendText(txt)

于 2009-11-28T06:09:12.860 に答える