次の呼び出しを使用して、プロセスを生成し、標準入力、標準出力、および標準エラー出力のファイル記述子を取得し、標準出力の出力を監視します。
[widget.pid,widget.stdin,widget.stdout,widget.stderr] = \
gobject.spawn_async(['/bin/sed','s/hi/by/g'],
standard_input=True,
standard_output=True,
standard_error=True
)
gobject.io_add_watch(widget.stdout,
gobject.IO_IN,
getdata)
次に、コールバック関数 getdata をトリガーすることを期待して、widget.stdin に行を書き込みます。
私が見つけたのは、widget.stdin を閉じたときにのみコールバック getdata が呼び出されることです。
一方、端末からは、sedは標準入力に送信された完成した各行をエコーするため、標準入力で完成した行が表示されるたびにsedが出力を生成し、一度に1行ずつ取得していないことが期待されます.
より多くの行を送信するために接続を開いたままにして、widget.stdin に書き込まれた行を /bin/sed に強制的に表示する方法については明確ではありません。python -u フラグは何の違いもないようです。何か案は?ありがとう。