2009-11-06 4 views
4

Если у меня есть консольная программа Windows, написанная с помощью C++, можно ли получить стандартный вывод этой программы во время работы программы? А если нет, то какой лучший способ переписать программу? Я знаю, что могу выводить файлы и постоянно проверять эти файлы на наличие обновлений. Есть ли другой способ? Есть ли способ лучше?Возможно ли получить выход программы во время ее работы?

+0

Извлеките его туда, где? В другую программу или файл журнала? – zebrabox

+0

в другую программу – blindley

+0

И что другая программа также написана на C++? – zebrabox

ответ

1

Если это готовый консоль исполняемый вы всегда можете перенаправить его вывод в файл, например так:

с:> эхо какой-то текст> Файл

или

C:> программы> файл

Если вы имеете в виду это? Как ваш вопрос не совсем ясен.

\\ в другую программу

Oh, Ok
Но мой первый ответ также используется для этого. Как есть и другие возможности:

c:> program1 | program2

его сделать «трубу» между консольными программами
program2 получить на него, что стандартный ввод program1 бросает на стандартный вывод
Его общий престарелый Unix-полосная практику в консольных программах.
И, таким образом, НЕ нужно переписывать программы, чтобы их поддерживать.

1

Да, если вы запускаете программу самостоятельно:

в CreateProcess, вы передаете STARTUPINFO, где вы можете указать дескрипторы для SDIN, STDOUT и STDERR. Обратите внимание, что oyu необходимо поставить все три, как только вы укажете флаг STARTF_USESTDHANDLES.

Кроме того, ручки должны быть наследуемым (в противном случае, дочерний процесс не может получить доступ к ним), поэтому SECURITY_ATTRIBUTES в основном должны выглядеть, по крайней мере, как это:

SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; 

Вы могли бы открыть ручки на диск файлы, содержащие входные и выходные данные. В качестве альтернативы это может быть Pipes, который можно прочитать/записать постепенно, пока консольное приложение запущено.

0

Если вы заинтересованы только в стандартном выводе программы, POPEN() делает это довольно просто:

FILE* program_output = popen("command line to start the other program"); 
//read from program_output as you would read a "normal" file 
//... 
pclose(program_output); 
0

Вы бы, скорее всего, нужно использовать трубы для достижения этой цели, и так как вы используете Windows, вот ссылка на MSDN article с примером, который, кажется, делает именно то, что вы хотели.