如何使 pythoncurses 应用程序管道友好?

use*_*153 5 python curses pipeline stdout

我正在编写一个 python 应用程序,旨在在 unix 管道内交互使用。应用程序应该启动基于curses的终端UI,并根据用户交互,仅在退出之前写入标准输出。

典型的用法是典型的管道:

foo_command | my_application | sink_app
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是 pythoncurses 库在应用程序运行时将各种内容发送到标准输出。此外,在运行sink_app时开始执行。my_application

  • 如何防止诅咒污染标准输出?
  • 当我想要刷新它时,如何缓冲输出和控制?
  • 是否可以控制何时sink_app开始执行以及何时停止接受输入?

根据我收集的信息,我需要保存对 stdout 文件描述符的引用,以便稍后可以写入它。并将另一个 fd(哪个?)传递给 ncurses。据说是通过 newterm() 实现的,但这在 pythoncurses 绑定上不可用。

Tho*_*key 4

您可以通过使用该函数直接打开终端来管理屏幕,同时为管道保留标准输出来执行此操作(在管道中设置curses应用程序。该程序就是这样做的。newtermdialog

但是Python的curses接口没有newterm(它只有initscr,它使用标准输出来显示屏幕......),虽然可能有解决方法(在Python中,处理I/O流),但它还没有在任何解决方案中得到解决。本论坛的答案。