Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько stdout'ов 
V
    Опции темы
borisbn
Дата 19.1.2015, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Здравствуйте!
Есть консольная linux-программа, которая выводит много всякой информации в stdout. В терминале получается каша, разобрать которую можно только постфактум по логу (если перенаправить весь вывод в файл).
Мне бы хотелось найти такую софт, который может переключать вывод от разных подсистем моей программы.
Например, моя программа пишет в консоль:
Цитата
<network>Can't connect to server 8.8.8.8
<database>Transaction couldn't be started
<network>Can't connect to server 4.4.4.4
<database>Transaction couldn't be finished

Хотелось бы запустить мою программу как-то так:
Цитата
my_prog | out_monitor

и по нажатию, например, Alt+0 видеть весь вывод (как приведено выше), по нажатию Alt+1 видеть только
Цитата
<network>Can't connect to server 8.8.8.8
<network>Can't connect to server 4.4.4.4

по нажатию Alt+2 видеть только
Цитата
<database>Transaction couldn't be started
<database>Transaction couldn't be finished

и т.д.
Вопрос: кто-нибудь встречал такой софт (out_monitor из примера выше) ?
Если нет, то подскажите, в какую сторону копать, чтобы, если я захочу сделать свой такой софт, я мог одновременно получать данные из stdin (например, при помощи getline) и перехватывать нажатия клавиш Alt+N ?
Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
baldina
Дата 19.1.2015, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



стадартных выводов всего два, cout и cerr, так что - логи
есть вот такое http://www.vanheusden.com/multitail/

еще вариант - отдавать в cout в определенном формате, и иметь tail+grep, переключаемый по alt (что можно сделать и без программизма, используя несколько консолей)
PM MAIL   Вверх
borisbn
Дата 19.1.2015, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



baldina, спасибо, покурю этот multitail, но у меня есть ещё одно ограничение - я работаю по ssh (через putty). Будет ли там это работать?
И ещё один момент - программа работает 24х7 и, соответственно, не хотелось бы всё, что она пишет в консоль, писать в файл. Место-то на диске не бесконечно.
Цитата(baldina @  19.1.2015,  12:57 Найти цитируемый пост)
еще вариант - отдавать в cout в определенном формате

Это-то, как раз, можно (см. в моём примере <network>... <database>...), но что потом с этим делать?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
tzirechnoy
Дата 19.1.2015, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



tail -f log |grep
PM MAIL   Вверх
_zorn_
Дата 19.1.2015, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(borisbn @  19.1.2015,  21:05 Найти цитируемый пост)
И ещё один момент - программа работает 24х7 и, соответственно, не хотелось бы всё, что она пишет в консоль, писать в файл. Место-то на диске не бесконечно.

Вы используете диски в несколько мегабайт, не слышали о log rotation и при этом хотите просматривать сообщения месячной (двух,трех и т.п.) давности ?

Мне кажется вы неправильно себе поставили задачу. Я например вообще не вижу смысла в подобной утилите. Тем более если программа ваша и вы вольны выбирать библиотеку логов. Можно например log4c. Почти стандарт для явы (log4j).

Это сообщение отредактировал(а) _zorn_ - 19.1.2015, 15:40
PM MAIL   Вверх
baldina
Дата 19.1.2015, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(borisbn @  19.1.2015,  14:05 Найти цитируемый пост)
я работаю по ssh (через putty)

откройте несколько консолей. tail будет работать и со стандартным выводом.
PM MAIL   Вверх
_zorn_
Дата 19.1.2015, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(baldina @  19.1.2015,  22:26 Найти цитируемый пост)
откройте несколько консолей. tail будет работать и со стандартным выводом. 

Он наверное имеет ввиду, чтобы по ALT+цифра и в путти переключало "типа консоли". Короче нестандартная ненужная задача.
PM MAIL   Вверх
borisbn
Дата 20.1.2015, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(_zorn_ @  19.1.2015,  15:26 Найти цитируемый пост)
хотите просматривать сообщения месячной (двух,трех и т.п.) давности

Нет. Я хочу зайти по ssh и увидеть текущее состояние. То, что было даже пол-часа назад мне не нужно.
Цитата(_zorn_ @  19.1.2015,  15:38 Найти цитируемый пост)
Он наверное имеет ввиду, чтобы по ALT+цифра и в путти переключало "типа консоли". Короче нестандартная ненужная задача. 

Именно!

А что насчёт
Цитата(borisbn @  19.1.2015,  10:38 Найти цитируемый пост)
подскажите, в какую сторону копать, чтобы, если я захочу сделать свой такой софт, я мог одновременно получать данные из stdin (например, при помощи getline) и перехватывать нажатия клавиш Alt+N ?

?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
baldina
Дата 20.1.2015, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(borisbn @  20.1.2015,  11:57 Найти цитируемый пост)
А что насчёт

читаешь со стандартного ввода. в памяти раскладываешь сортируешь как тебе надо. выводишь последние N строк.
Alt+N и работа с консолью в стиле top - ncurses

Это сообщение отредактировал(а) baldina - 20.1.2015, 12:36
PM MAIL   Вверх
borisbn
Дата 20.1.2015, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



baldina, В том-то и дело, что мне нужно получать информацию о нажатии Alt+N по некоему прерыванию (или сигналу), т.к. основной цикл программы должен будет выглядеть примерно так:
Код
while ( true ) {
    getline( line ); //<---- Вот тут, насколько я понимаю, я буду "висеть", пока не получу строку из stdin
// (1) if ( kbhit() ) ch = getch();
    int typeOfLine = parse( line );
    if ( typeOfLine == g_currentType ) { //<---- Вот этот самый g_currentType и должен изменяться где-то снаружи по нажатию Alt+N
        cout << line;
    }
}

Я, конечно, могу в (1) проверять, нажата ли какая-нибудь клавиша, но тогда я не смогу переключиться между "окнами" пока подопечная программа не выдаст что-нибудь в stdout... А если она зависла, то я вообще ничего не смогу сделать.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
tzirechnoy
Дата 20.1.2015, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Ну, tail -f |grep + screen.
PM MAIL   Вверх
baldina
Дата 20.1.2015, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(borisbn @  20.1.2015,  18:26 Найти цитируемый пост)
getline( line ); //<---- Вот тут, насколько я понимаю, я буду "висеть", пока не получу строку из stdin

а) прежде чем это делать, можно проверять, есть ли что вводдить при помощи cin.get()
б) можно это делать в другом потоке
PM MAIL   Вверх
borisbn
Дата 20.1.2015, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



tzirechnoy, ну не хочу я файлы писать. И потом, мне этих grep'ов нужно столько, сколько у меня будет подсистем, а в своей программе я смогу динамически эти подсистемы выявлять (допустим, каждый вывод будет начинаться с <subsystem_name>).
А screen - ессно... как же я по ssh зайду в рабочую программу...

baldina, спасибо, про cin.get() не знал (оч. мало работаю с консолью). Да и про другой поток не подумал.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0925 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.