我使用以下调用来生成一个进程,取回其 stdin、stdout 和 stderr 的文件描述符,并观察其 stdout 上的输出:
[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)
然后我向widget.stdin 写入行,期望触发回调函数getdata。
我发现只有在我关闭 widget.stdin 时才会调用回调 getdata。
另一方面,从终端,sed 回显发送到标准输入的每个完成的行,所以我希望 sed 每当它在其标准输入上看到一个完成的行并且它一次没有得到这些行时就会生成输出.
我不清楚如何强制写入widget.stdin 的行在/bin/sed 中显示,同时保持连接打开以发送更多行。python -u 标志似乎没有任何区别。有任何想法吗?谢谢。