The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Почему не ловится весь вывод процесса ?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Почему не ловится весь вывод процесса ?"
Сообщение от Ted emailИскать по авторуВ закладки on 26-Июн-01, 18:38  (MSK)
Нужно сделать простенькую программку, которая бы обрабатывала весь вывод некоторой программы ( а также могла вводить данные в ее stdin ).

Делаю так:
1) создаю два fifo.
2) fork
3.parent) открываю оба fifo.
3.child)  делаю freopen, переназначая stdin и stdout на эти fifo.
4.child) делаю execve на нужную программу.

Пока что в родителе просто крутится цикл, читающий все из входного fifo и кидающий это на stdout родителя (консоль).

Если запускать что-то типа "echo Some text", то все прекрасно передается по трубе родителю.

Но некоторые приложения умудряются писАть мимо... Конкретное приложение, которое хочется "зажать в тиски", некоторые сообщения пропускает через pipe, а некоторые - нет. Причем, more ( и less ) так же перехватывают не все сообщения ( ровно те, которые я могу перехватить пайпом ). Да, stderr по-прежнему направлен на консоль.

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

Заранее спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от XMan Искать по авторуВ закладки on 26-Июн-01, 19:01  (MSK)
Помимо stdout у программы есть еще stderr. Обычно используется такое соответвтие файловых дескрипторова:
0 - stdin
1 - stdout
2 - stderr

Тебе нужно переправить всё из 2 в 1. В шеле это выглядит как:
#команда параметры_к_ней 2>&1

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от Ted emailИскать по авторуВ закладки on 27-Июн-01, 12:33  (MSK)
Да не... Я об этом знаю. Я ж написал, что stderr идет на консоль.

Получается вот что: пускаем без перенаправления - на консоли много разного текста.

Пускаем так: <программа> > log.txt 2> log2.txt

Получаем: log.txt пуст, а в log2.txt лишь пара строчек... На консоли вообще ничего не появляется... Как же это понимать ? Куда делось все остальное ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от Арлекин Искать по авторуВ закладки on 28-Июн-01, 13:49  (MSK)
гм. ">" - эта тварь транкейтит файл, соответственно потоки у тя затерли один другого.
попробуй так:

progname >> log.txt 2>> log2.txt

ибо ">>" позволяетделать запись в хвост файла.

успехов.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от Ted emailИскать по авторуВ закладки on 29-Июн-01, 01:56  (MSK)
Не... не тот случай. На всякий случай скажу, что эта прога - quake2.

Даже если я делаю просто

./quake2 > log.txt

то выводится только то, что предназначалось stderr. Все остальное ( хрен знает кому предназначающееся ) в этом случае просто исчезает. Имеем пустой log.txt и полупустой экран...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от XMan Искать по авторуВ закладки on 29-Июн-01, 03:58  (MSK)
Странно, а у меня нормально раскидывает по файлам stdout и stderr ...
:-\
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от Ted emailИскать по авторуВ закладки on 29-Июн-01, 12:25  (MSK)
Кто раскидывает ?
Вернее, кого раскидываем ? :)  Quake2 ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от XMan Искать по авторуВ закладки on 29-Июн-01, 20:11  (MSK)
Его родимого :))
Пущаем:
./quake2 > log1.txt 2>log2.txt

В результате получаем чистую консоль, всякие сообщения в log1.txt и сообщение о невозможности открыть /dev/dsp (xmms у меня на нем висит) в log2.txt :))
Версия  3.15.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "RE: Почему не ловится весь вывод процесса ?"
Сообщение от Ted emailИскать по авторуВ закладки on 02-Июл-01, 01:46  (MSK)
У меня 3.20.
Slackware.

экран - чистый
log1.txt - пустой
log2.txt - про /dev/dsp как и у тебя...

Вот такой, блин, уникум случился ! :)

Не знаю что и думать...

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру