Получить вывод из приложения Ncurses на отдельном терминале

Я хотел бы решение, которое позволяет мне отделить ncurses Приложите приложение к другому окну эмулятора терминала и просмотрите выходные данные стандартных команд, таких как 'cout', в текущей - для отладки и тому подобного.

Я видел много решений, которые пишут в файл и используют tail но это кажется довольно хакерским и медленным. КСТАТИ. Я понятия не имею, с чего начать, я совсем новичок в ncurses.

3 ответа

Вы можете инициализировать проклятия одним из двух способов:

  • с помощью initscr (который использует стандартный ввод / вывод), или

  • с помощью newterm (который позволяет указать, какой вход / выход использовать)

Например, тестовая программа ncurses ditto использования newterm открыть выходные дисплеи на одном или нескольких xterm. Вот скриншот:

то же самое с 3 клиентами

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

Прежде всего, ncurses использует стандартный out для своего вывода, поэтому простое использование cout перепутает вывод. Обычно вы хотите использовать стандартную ошибку ('cerr') вместо этого для отладки и тому подобного.

Если вы не хотите использовать простой файл и tail (что не медленно, если ваше приложение каким-то образом не экстремально), вы можете использовать именованный канал, например:

mkfifo debug-pipe

Затем запустите ваше приложение в новом терминале (например, xterm) и перенаправьте вывод ошибок в именованный канал.

xterm -e "my-application 2> debug-pipe" &

И наконец сбросьте именованный канал в первый терминал (или любой терминал).

cat debug-pipe

(Кстати, я думаю, я понимаю, какое решение вы впервые представили. Если бы второй эмулятор терминала мог просто перенаправить стандартную ошибку на свою собственную стандартную ошибку, он просто появился бы в первом терминале. Это было бы легко для эмулятора терминала чтобы сделать это, но, насколько я знаю, никто не имеет такой возможности.)

Отсоединение и повторное присоединение любого сеанса консоли может быть достигнуто с помощью screen или же tmux Программы.

Другие вопросы по тегам