Как сделать дружественный конвейер приложений Python Curses? - PullRequest
0 голосов
/ 10 декабря 2018

Я пишу приложение на Python, которое предназначено для интерактивного использования внутри конвейеров Unix.Приложение должно запустить пользовательский интерфейс терминала на основе curses и, основываясь на взаимодействии с пользователем, записывать в стандартный вывод только перед выходом.

Типичное использование - типичный конвейер:

foo_command | my_application | sink_app

Проблема, с которой я сталкиваюсь, состоит в том, что библиотека python curses отправляет все виды вещей на стандартный вывод во время работы приложения.Кроме того, sink_app начинает выполняться, когда my_application работает.

  • Как предотвратить попадание проклятий в стандартный вывод?
  • Как мне буферизовать вывод и управление, когда я хочусбросить его?
  • Можно ли контролировать, когда sink_app начинает выполняться и когда он прекращает принимать ввод?

Из того, что я собираю, мне нужно сохранить ссылку на стандартный выводдескриптор файла, чтобы я мог позже написать в него.И передать другой fd (который?) Ncurses.Предположительно, через newterm (), но это не доступно при связывании проклятий Python.

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете сделать это (настроить приложение curses в конвейере ), используя функцию newterm, чтобы напрямую открыть терминал для управления экраном, сохраняя при этом стандартный вывод для конвейера.Программа dialog делает это.

Но интерфейс проклятий Python не имеет newterm (он имеет только initscr, который использует stdout для экрана ...), и, хотя, возможно, существуют обходные пути (в Python для манипулирования потоками ввода / вывода), он не был рассмотрен ни в одном из ответов на этом форуме.

...