От новичка до гуру: Курсы программирования на CyberDuff

Отлов прямого перенаправления на /dev/tty

Я работаю над контроллером приложений для программы, которая передает текст непосредственно в /dev/tty.

Это контроллер производственного приложения, который должен иметь возможность перехватывать весь текст, поступающий на терминал. Как правило, это не проблема. Мы просто перенаправляем stdout и stderr. Это конкретное приложение делает прямые вызовы echo и перенаправляет результат на /dev/tty (echo "some text" > /dev/tty). Перенаправления через мой контроллер приложений не могут перехватить текст.

У меня есть исходный код этого приложения, но я не в состоянии его изменить, и он больше не поддерживается. Любые идеи о том, как поймать и/или выбросить вывод?

20.11.2008

Ответы:


1

Я не могу точно определить, будет ли программа screen, упомянутая @flolo, делать то, что вам нужно, или нет. Возможно, но я не уверен, есть ли встроенное средство ведения журнала, которое, похоже, вам нужно.

Вероятно, уже есть программа, которая делает то, что вам нужно. Я бы предложил sudosh как вариант.

Если вам в конечном итоге потребуется написать свой собственный, вам, вероятно, потребуется использовать псевдотерминал (pty) и настроить контроллер приложения между реальным терминальным соединением пользователя и устройством pty, где он может регистрировать все, что вам нужно. это войти. Это не тривиально. Информацию об этом можно найти в книге Рочкинда «Advanced UNIX Programming, 2nd Edn" и, несомненно, другие подобные книги (книга Стивенса "Advanced Programming in the UNIX Environment" является вероятным кандидатом, но у меня нет копии, чтобы проверить это).

21.11.2008

2
 screen -D -m yourEvilProgram

должно сработать. Прошло много времени с тех пор, как я использовал его, но если вам нужно прочитать некоторые его выходные данные, возможно, вы даже можете использовать некоторые сокеты для их чтения.

[Добавлено: две ссылки, Rackaid и Pixelbeat, а также главную страницу по адресу GNU]

20.11.2008

3

Классическим решением для управления таким приложением является Expect, который устанавливает псевдотерминалы, ведет журнал, и управляет управляемым приложением из скрипта. Он поставляется с множеством примеров сценариев, поэтому вы, вероятно, можете просто адаптировать один из них в соответствии со своими потребностями.

11.09.2009

4

Это то, что я сделал в питоне

import pty, os

pid, fd = pty.fork()
if pid == 0: # In the child process execute another command
    os.execv('./my-progr', [''])
    print "Execv never returns :-)"
else:
    while True:
        try:
            print os.read(fd,65536),
        except OSError:
            break
01.11.2010
Новые материалы

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

Игра в прятки с данными
Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

«Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

Все о кейсах: Camel, Snake, Kebab & Pascal
В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..