Перенаправление сообщений об ошибках из командной строки: STDERR/STDOUT

В этой статье описывается перенаправление сообщений об ошибках из командной строки.

Исходная версия продукта: Visual C++
Оригинальный номер базы знаний: 110930

Сводка

При перенаправлении выходных данных из приложения с помощью символа > сообщения об ошибках по-прежнему печатаются на экране. Это связано с тем, что сообщения об ошибках часто отправляются в поток стандартных ошибок, а не в поток стандартного выхода.

Выходные данные из приложения или команды консоли (командной строки) часто отправляются в два отдельных потока. Обычные выходные данные отправляются в стандартный out (STDOUT), а сообщения об ошибках — в стандартную ошибку (STDERR). При перенаправлении выходных данных консоли с помощью символа > вы перенаправляете только STDOUT. Чтобы перенаправить STDERR, необходимо указать 2> для символа перенаправления. При этом выбирается второй выходной поток, который является STDERR.

Пример

dir file.xxx Команда (где file.xxx не существует) отобразит следующие выходные данные:

Том на диске F — Candy Candy Cane Volume Serial Number — 34EC-0876
Файл не найден

Если вы перенаправляете выходные данные на устройство NUL с помощью dir file.xxx > nul, вы по-прежнему увидите сообщение об ошибке:

Файл не найден

Чтобы перенаправить сообщение об ошибке в NUL, используйте следующую команду:

dir file.xxx 2> nul

Кроме того, можно перенаправить выходные данные в одно место, а ошибки — в другое.

dir file.xxx > output.msg 2> output.err

Вы можете вывести ошибки и стандартные выходные данные в один файл с помощью &1 команды , чтобы перенаправить выходные данные для STDERR в STDOUT, а затем отправить выходные данные из STDOUT в файл:

dir file.xxx 1> output.msg 2>&1