Как программно перехватить вывод команды в Windows - PullRequest
0 голосов
/ 11 августа 2010

Что говорит вопрос.

В конечном итоге я хочу выполнить gcc и перехватить вывод, если есть ошибка . Проблема в том, что ошибки записываются в stderr вместо stdout. На Linux я могу сделать

gcc foo.c 2>&1

Как мне это сделать в Windows?

Ответы [ 3 ]

5 голосов
/ 11 августа 2010

Есть. Просто щелкните правой кнопкой мыши в окне консоли и выберите Mark. С помощью мыши выберите нужную область и щелкните правой кнопкой мыши. Теперь вы можете вставить его в текстовый файл с помощью Ctrl-V.

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

myprogram.exe > myfile.txt

Смотрите здесь о перенаправлении:
1. Использование операторов перенаправления команд
2. Перенаправление сообщений об ошибках из командной строки: STDERR / STDOUT

Вы можете делать то, что вы хотите, как это: D:\>dir 1> test.txt 2> testerr.txt

4 голосов
/ 11 августа 2010

Ричард, ваш «принятый ответ» слишком длинный и слишком неправильный.

Краткий ответ на ваш вопрос (как в настоящее время указано в вашем последнем предложении: «Как мне это сделать в Windows?» ):

Точно так же, как вы делаете это в Linux!



Но я также дам вам длинный ответ.

Ваше перенаправление 2>&1 работает в окне cmd.exe таким же образом. Я даже перепроверил это прямо сейчас, так как мой опыт cmd.exe немного ржавый. Я использовал эту команду Ghostscript (специально предназначенную для вывода на стандартный вывод, а также на стандартный вывод):

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf

Я получил весь ожидаемый вывод в окно оболочки. Тогда я сделал:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>stdout.log

и stderr все еще печатались в окне, но stdout.log имел «отсутствующий» исходный вывод. Затем я сделал:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          2>stderr.log

и stdout теперь выводятся в окно, а stderr.log содержит остальные сообщения Ghostscript. Далее:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>stdout.log 2>stderr.log

и (как и ожидалось): нет выходных данных в окне, все выходные данные разделены между stdout.log и stderr.log. Последний тест:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>all.log 2>&1

и результат сейчас:

  1. ничего в окне,
  2. все в all.log.

То же поведение, что и при перенаправлении stderr / stdout, как в Linux.

0 голосов
/ 11 августа 2010

Если вы хотите получить вывод конкретной команды , есть простой способ отправить консольный вывод в файл.

Вот простой пример использования команды 'dir' (ведущий> представляет вашу подсказку):

>dir > diroutput.txt

...