首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使python诅咒应用程序管道友好?

如何使python诅咒应用程序管道友好?
EN

Stack Overflow用户
提问于 2018-12-09 21:24:35
回答 2查看 645关注 0票数 3

我正在编写一个python应用程序,用于在unix管道中交互使用。应用程序应该触发一个基于诅咒的终端UI,并且基于用户交互,只在退出之前写入标准输出。

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

代码语言:javascript
复制
foo_command | my_application | sink_app

我遇到的问题是,python诅咒库在应用程序运行时将各种东西发送到stdout。此外,sink_app在运行my_application时开始执行。

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

根据我收集的信息,我需要保存对stdout文件描述符的引用,以便以后可以写入它。并通过另一个fd (哪一个?)敬诅咒。应该是通过newterm(),但这在python诅咒绑定中是不可用的。

EN

回答 2

Stack Overflow用户

发布于 2018-12-10 01:27:47

您可以这样做(在管道中设置一个诅咒应用程序),方法是使用newterm函数直接打开用于管理屏幕的终端,同时为管道保留stdout。dialog程序就是这样做的。

但是Python接口没有newterm (它只有initscr,它使用stdout作为屏幕.),虽然可能有一些解决办法(在Python中,可以处理I/O流),但是这个论坛上的任何一个答案都没有提到它。

票数 3
EN

Stack Overflow用户

发布于 2020-05-29 03:09:16

作为suggested,杂耍输入流。这不是很好的测试,但似乎在正确的轨道上。

代码语言:javascript
复制
import os

# back up the piped stdin
mystdin_fd = os.dup(0)

# open the terminal for reading keyboard events
termin = open("/dev/tty")

# replace stdin with the terminal, so curses initscr() and getch() work
os.dup2(termin.fileno(), 0)

# initialise curses - https://docs.python.org/3/howto/curses.html
...

# read from the piped stdin
mystdin = open(mystdin_fd, 'r')
for line in mystdin:
    ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53696818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档