subprocess.Popenオブジェクトを使用していくつかのサブプロセスを実行するPythonアプリケーションを作成しています。グレイドGUIがあり、これらのコマンドの出力(subprocess.Popenで実行)をGUIでリアルタイムに表示したいと考えています。
誰かがこれを行う方法を提案できますか?どの空き地オブジェクトを使用する必要があり、出力をリダイレクトする方法は?
subprocess.Popenオブジェクトを使用していくつかのサブプロセスを実行するPythonアプリケーションを作成しています。グレイドGUIがあり、これらのコマンドの出力(subprocess.Popenで実行)をGUIでリアルタイムに表示したいと考えています。
誰かがこれを行う方法を提案できますか?どの空き地オブジェクトを使用する必要があり、出力をリダイレクトする方法は?
たくさん読んだ後、私が望む結果が得られなかった後、私はうまくいく別の方法を見つけました。
こんなふうになります
#!/usr/bine/env python
import subprocess
import gtk
### Of course, you should have the gui built and know which widgets to use for this.
viewer = self.builder.get_object('txtview')
proc = subprocess.Popen('ls -al /home'.split(), stdout=subprocess.PIPE, stderr = subprocess.STDOUT)
while True:
line = proc.stdout.readline()
viewer.get_buffer().insert_at_cursor(line)
if not line:
break
これを行う別の方法も表示するリンクは次のとおりです。
これは非常に洞察に満ちていることがわかりました。おそらく他の誰かがこれらのヒントを使用できます。
http://pygabriel.wordpress.com/2009/07/27/redirecting-the-stdout-on-a-gtk-textview/
gladeはgtkでGUIを構築するためのプログラムにすぎないため、gladeオブジェクトを要求するときは、 gtkウィジェットを要求する必要があります。この場合、textbufferとtextviewがソリューションになるか、treeviewとliststoreになる可能性があります。
ファイルのようなオブジェクトを受け入れることができる引数がsubprocess.Popen
ありstdout
ます。stderr
テキストバッファに書き込むアダプタを作成したり、リストストアにアイテムを追加したりできます