2

Python/gtk ベースの Ubuntu の「迅速な」フレームワークを使い始めています。stdin/stdout を使用するテキストモード C ステートマシン用の gui ラッパーを作成したいと考えています。

私はgtkが初めてです。python print コマンドがターミナル ウィンドウに書き込むことがわかるので、それを C プログラムの stdin にリダイレクトできると思います。しかし、どうすれば高速プログラムで stdin を監視できるようになるでしょうか (つまり、C プログラムの stdout 応答を監視します)。ある種のポーリングループが必要だと思いますが、それが「迅速に」フレームワーク内でサポートされているかどうか/どこでサポートされているかはわかりません。

または、リダイレクトは進むべき道ではありません - gobject.spawn_async のようなものを見るべきですか?

4

2 に答える 2

4

select の gtk バージョンは glib.io_add_watch です。プロセスの stdin/stdout を GUI との間でリダイレクトしたい場合は、私が以前に書いた記事を確認してください。

http://pygabriel.wordpress.com/2009/07/27/redirecting-the-stdout-on-a-gtk-textview/

于 2010-06-07T19:39:49.753 に答える
2

迅速なフレームワークについてはわかりませんが、Python では subprocess モジュールを使用できます。これにより、新しい子プロセスが生成されますが、stdin/stdout を介した通信が可能になります。

http://docs.python.org/library/subprocess.html

ドキュメントを見てみましょうが、それはかなり役に立ちます。

ポーリングを行いたい場合は、gobject.timeout_addを使用できます。

次のような関数を作成します。

def mypoller(self):
    data = myproc.communicate()
    if data[0]: #There's data to read
       # do something with data
    else:
       # Do something else - delete data, return False
       # to end calls to this function

これにより、プロセスからデータを読み取ることができます。

于 2010-06-07T19:38:35.373 に答える