Сохранения вывода консоли
От: Aniskin  
Дата: 10.01.18 12:36
Оценка:
Запускаю свое консольное приложение с флагом CREATE_NEW_PROCESS_GROUP. Это консольное приложение запускает другое консольное приложение и его вывод происходит в мою консоль. Как мне сохранить сохранить этот вывод? Т.е. как сделать так, что бы вывод второго приложения был и в мою консоль, и в куда нибудь еще для дальнейшей обработки?
Re: Сохранения вывода консоли
От: RonWilson Россия  
Дата: 10.01.18 13:02
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Запускаю свое консольное приложение с флагом CREATE_NEW_PROCESS_GROUP. Это консольное приложение запускает другое консольное приложение и его вывод происходит в мою консоль. Как мне сохранить сохранить этот вывод? Т.е. как сделать так, что бы вывод второго приложения был и в мою консоль, и в куда нибудь еще для дальнейшей обработки?


может, так

The CreateProcess() API through the STARTUPINFO structure enables you to redirect the standard handles of a child console based process. If the dwFlags member is set to STARTF_USESTDHANDLES, then the following STARTUPINFO members specify the standard handles of the child console based process:


HANDLE hStdInput — Standard input handle of the child process.
HANDLE hStdOutput — Standard output handle of the child process.
HANDLE hStdError — Standard error handle of the child process.


You can set these handles to either a pipe handle, file handle, or any handle that can do synchronous reads and writes through the ReadFile() and WriteFile() API. The handles must be inheritable and the CreateProcess() API must specify that inheritable handles are to be inherited by the child process by specifying TRUE in the bInheritHandles parameter.

Re[2]: Сохранения вывода консоли
От: Aniskin  
Дата: 10.01.18 13:06
Оценка:
Здравствуйте, RonWilson, Вы писали:

RW>может, так


А как мне при этом сохранить вывод второй консоли в первую? Ведь мне нужно продублировать вывод, а не перенаправить его.
Re[3]: Сохранения вывода консоли
От: RonWilson Россия  
Дата: 10.01.18 13:19
Оценка: 8 (2)
Здравствуйте, Aniskin, Вы писали:

A>А как мне при этом сохранить вывод второй консоли в первую? Ведь мне нужно продублировать вывод, а не перенаправить его.


пишут, что можно через pipe, оставив в покое stdout child-а:

If the parent process creates an anonymous pipe it can use the write handle as the child process's stdout. The parent process would need to service the pipe; e.g. it might have a thread to read data from the pipe and write it to its own console.

Re[4]: Сохранения вывода консоли
От: Aniskin  
Дата: 10.01.18 21:22
Оценка: 4 (1)
Здравствуйте, RonWilson, Вы писали:

RW>можно через pipe


Получилось, спасибо. Создал пайп, его передаю child-у. В своем консольном приложении создал дополнительный поток, который читает этот пайп и выводит его в мою консоль и в файл.
Re[5]: Сохранения вывода консоли
От: Mr.Delphist  
Дата: 29.01.18 13:49
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Здравствуйте, RonWilson, Вы писали:


RW>>можно через pipe


A>Получилось, спасибо. Создал пайп, его передаю child-у. В своем консольном приложении создал дополнительный поток, который читает этот пайп и выводит его в мою консоль и в файл.


Если что, можно заюзать готовую тулзу "tee" из MinGW (по сути, порт юниксовой тулзы). Ну и в PowerShell есть Tee-Object для схожих целей.
http://gnuwin32.sourceforge.net/packages/coreutils.htm
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.