Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
20 Июль 2025, 13:56:04
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование
(Модераторы: Админ, barmalei) > Тема:

перехват STDOUT

Страниц  :   Вниз
  Печать  
Автор Тема: перехват STDOUT  (Прочитано 2146 раз)
0 Пользователей и 1 Гость смотрят эту тему.
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« : 14 Май 2008, 21:21:09 »

Народ!!! может кто знает как перехватить данные отправляемые прогой на стандартный вывод (консоль) (Нужно чеб под виндой работало)
Записан

HTTP Error 404 - File or directory not found.
VooDoo
Почетный гродненец
*****

Репутация: +89/-1
Offline Offline

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #1 : 14 Май 2008, 21:27:57 »

soft.exe > output.txt
это просто перенаправление вывода
« Последнее редактирование: 14 Май 2008, 21:29:26 от VooDoo » Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #2 : 14 Май 2008, 22:44:37 »

Мне нужно написать прогу, которая запускает другую консольную прогу и перехватывает из запущеной проги все что та выбрасывает в консоль
Записан

HTTP Error 404 - File or directory not found.
VooDoo
Почетный гродненец
*****

Репутация: +89/-1
Offline Offline

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #3 : 15 Май 2008, 10:33:56 »

смотри, в своей читаешь поток входящий и запускаешь просто как
soft.exe > your_soft.exe и всё. Но это будет std_out, еррорный поток винда не умеет перенаправлять, а всегда пускает на консоль
« Последнее редактирование: 15 Май 2008, 10:34:54 от VooDoo » Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
iddqd
Лёдчег
Почетный гродненец
*****

Репутация: +170/-10
Offline Offline

Пол: Мужской
Сообщений: 2275


Не уйдешь!

Просмотр профиля
« Ответ #4 : 15 Май 2008, 11:29:44 »

я думаю soft.exe > your_soft.exe не софсем то что надо, т.е. не софсем будет работать. замарчивался с этой проблемой я уже   Улыбка
 PROCESS_INFORMATION piProcInfo;
               STARTUPINFO siStartInfo;
                ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );

                HANDLE ChildStdOutRead, ChildStdOutWrtite, ChildStdInRead, ChildStdInWrite;
                HANDLE ParentStdOutRead, ParentStdInWrite;
                ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
                siStartInfo.cb = sizeof(STARTUPINFO);

                SECURITY_ATTRIBUTES saAttr;
                saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
                saAttr.bInheritHandle = TRUE;
                saAttr.lpSecurityDescriptor = NULL;
                //pipe for child's out
                CreatePipe(&ChildStdOutRead, &ChildStdOutWrtite, &saAttr, 0);

                DuplicateHandle(GetCurrentProcess(), ChildStdOutRead,   GetCurrentProcess(), &ParentStdOutRead, 0, FALSE, DUPLICATE_SAME_ACCESS);
                CloseHandle(ChildStdOutRead);

                //pipe for child's in
                CreatePipe(&ChildStdInRead, &ChildStdInWrite, &saAttr, 0);

                DuplicateHandle(GetCurrentProcess(), ChildStdInWrite,   GetCurrentProcess(), &ParentStdInWrite, 0, FALSE, DUPLICATE_SAME_ACCESS);
                CloseHandle(ChildStdInWrite);
                siStartInfo.hStdError = ChildStdOutWrtite;
                siStartInfo.hStdOutput = ChildStdOutWrtite;
                siStartInfo.hStdInput = ChildStdInRead;
                siStartInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
                siStartInfo.wShowWindow = SW_HIDE;


                CreateProcess(Command, Arg, NULL, NULL, true, 0, NULL, data.TempDir, &siStartInfo, &piProcInfo);

              
                while (1)
                {
                        WaitForSingleObject(piProcInfo.hProcess, CONSOLE_WAITING_INTERVAL);
                        CHAR Buffer[MAX_STR_LENGTH*10] = {0};
                        DWORD dwRead = 0;
                        BOOL ReadResult = ReadFile(ParentStdOutRead, Buffer, MAX_STR_LENGTH*10, &dwRead, NULL);
                        while (ReadResult && dwRead==0)
                        {
                                ReadResult = ReadFile(ParentStdOutRead, Buffer, MAX_STR_LENGTH*10, &dwRead, NULL);
                        }

                        //parsing output
                        //........................
                        //.......................
                        //а так мона писать иму на фход
                         WriteFile(ParentStdInWrite, "yes\r\n", 5, &dwWrite, NULL);

                }

вопщем идея должна быть понятна. на мсдне фсе это далжно быть
Записан
maxposedon
Настоящий гродненец
****

Репутация: +26/-0
Offline Offline

Сообщений: 696


empty

Просмотр профиля
« Ответ #5 : 15 Май 2008, 12:38:34 »

VooDoo тока перенаправление делается через pipe : 1.exe | 2.exe
и винда умеет перенаправлять stderr  : 1.exe > std_out.log 2> std_err.log

DeNiM мусье знает толк в извращениях, стандартный C-шный popen
не катит?

если нужно читать std_err (в чём я лично очень сильно сомневаюсь), то и для его есть перенаправление в std_out, тока я сейчас уже не помню как.
(может и 2>&1 но не уверен).
Записан
VooDoo
Почетный гродненец
*****

Репутация: +89/-1
Offline Offline

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #6 : 15 Май 2008, 12:55:56 »

Цитировать
VooDoo тока перенаправление делается через pipe : 1.exe | 2.exe
ну это уже от реализации зависит

я вот буквально месяца два назад билд скрипты писал и сцуко что-то оно у меня antовский err поток не хотело перенаправлять. Сча поправил, работаед  Строит глазки

2>&1 должно работать
Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
maxposedon
Настоящий гродненец
****

Репутация: +26/-0
Offline Offline

Сообщений: 696


empty

Просмотр профиля
« Ответ #7 : 15 Май 2008, 13:03:03 »

не не от реализации)
подумай сам что делает 1.exe > 2.exe : он создаёт(или пересоздаёт)
файл 2.exe (и туда пишет вывод, а не запускает 2.exe).
Записан
iddqd
Лёдчег
Почетный гродненец
*****

Репутация: +170/-10
Offline Offline

Пол: Мужской
Сообщений: 2275


Не уйдешь!

Просмотр профиля
« Ответ #8 : 15 Май 2008, 13:15:51 »

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

во фторых, мусье, прочтите что говорит нам мсдн про popen()

Цитировать
Note   If used in a Windows program, the _popen function returns an invalid file pointer that will cause the program to hang indefinitely. _popen works properly in a Console application. To create a Windows application that redirects input and output, see Creating a Child Process with Redirected Input and Output in the Platform SDK.

чесно, понять что они тут хотят сказать сложновато. толи не юзать popen воопще, толи он работает только с консоли на консоль, и что они понимают под Windows program не ясно.
Записан
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #9 : 15 Май 2008, 13:36:52 »

может это возможно сделать средствами Qt? Просто от  WinAPI-ого кода можно слегка подорвать психику
« Последнее редактирование: 15 Май 2008, 13:38:35 от coolasm » Записан

HTTP Error 404 - File or directory not found.
maxposedon
Настоящий гродненец
****

Репутация: +26/-0
Offline Offline

Сообщений: 696


empty

Просмотр профиля
« Ответ #10 : 15 Май 2008, 13:39:42 »

ДА ЗАПУСТИ НАКОНЕЦ assistant

p.s. QProcess - весь функционал, что тебе надо там есть.
Записан
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #11 : 15 Май 2008, 14:32:46 »

О, действительно дельный совет, спасибо.
Записан

HTTP Error 404 - File or directory not found.
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,11 секунд. Запросов: 20.