Перенаправление stdout .bat-file-содержа-исполняемого файла в файл - PullRequest
0 голосов
/ 06 мая 2011

У меня есть командный файл, который вызывает исполняемую программу. Программа (скомпилированный код C) генерирует некоторый вывод в stdout. Пакет также выводит некоторую информацию. При запуске летучей мыши я использую перенаправление (>), чтобы получить текст в файл.

mybat.bat содержит:

myprog.exe arg1 %1 arg3  
echo Done

затем на консоли:

C:\> mybat arg2 > log.txt

Проблема в том, что в log.txt я получаю только выходные данные команды echo Done, а не выходные данные myprog.exe. Без перенаправления я получаю ожидаемый вывод на экран.

Примечание: под Windows XP

Обновление: это становится еще более странным. При запуске myprog.exe из командной строки я получаю ожидаемый вывод на консоль. Затем при перенаправлении его вывода на log.txt файл будет пустым! Печать выполняется с использованием fprintf(stdout, "...") или fprintf(ofp, "..."), где назначено ofp: FILE *ofp = stdout;.

Дальнейшее исследование: кажется, что строки fprintf(stdout... перенаправлены, а fprintf(ofp... нет (да, указатель назначен правильно). Я также обнаружил, что программа в какой-то момент вылетает (при вызове feof()). Итак, мой вывод заключается в том, что из-за аварийного завершения программы стандартные выходные буферы не были записаны в файл. ОДНАКО - это произошло только для строк, которые используют указатель. Я предполагаю, что эти строки имеют более короткий вывод, поэтому частота сброса ниже (я использовал строку stdout, чтобы напечатать преднамеренное сообщение помощи).

После решения проблемы сбоя данные теперь перенаправляются в файл журнала. Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

Попробуйте это:

cmd /c "mybat.bat arg2" > log.txt
0 голосов
/ 06 мая 2011

Попробуйте перенаправить как stdout, так и stderr в файл журнала.

mybat arg2 1>&2> log.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...