Должен ли я выводить предупреждения в STDERR или STDOUT?

StackOverflow https://stackoverflow.com/questions/1430956

  •  07-07-2019
  •  | 
  •  

Вопрос

Я делаю сценарий, который обрабатывает предопределенный набор данных, выводя в файл. Я хочу, чтобы появилось предупреждение, когда один элемент данных (который всегда является "обычным" в каждом наборе, к которому у меня был доступ) отличается тем, что это значение не обрабатывается (поскольку я не знаю, как оно влияет на данные) , Должен ли я вывести это предупреждение на stderr или stdout?

Это было полезно?

Решение

Если бы я сохранил выходные данные этого сценария (то есть только стандартный вывод), чтобы я мог обработать его позже, будет ли это предупреждение мешать анализу выходных данных? Более того, если выходные данные передаются другому процессу, предупреждение должно появиться на терминале, поэтому пользователь сразу увидит его.

Обычно по этим причинам вы выводите предупреждения в stderr.

Другие советы

Предупреждение должно быть отправлено в stderr.

В дополнение к пунктам, представленным другими (вызывающим ошибки синтаксического анализа для последующих процессов и скрывающим ошибку от пользователя на консоли), существует проблема гибкости.

Если пользователь не хочет, чтобы предупреждение от stderr передавалось в последующий процесс, который анализирует stdout, ему не нужно делать ничего особенного.

your_script | downstream_process

Если пользователь хочет, чтобы предупреждение от stderr передавалось в последующий процесс, который будет анализировать stdout и stderr, пользователь может использовать 2 > & amp; 1 для перенаправления stderr в stdout.

your_script 2>&1 | downstream_process

Если вы выводите как предупреждения, так и обычные данные на стандартный вывод, у пользователя нет хорошего способа отделить предупреждения от данных, не анализируя все. Поэтому отправка предупреждений в stderr также повышает гибкость вашего сценария.

Реальный вопрос заключается в следующем: если бы кто-то перенаправил вывод вашего скрипта в файл, вы бы хотели, чтобы предупреждение было помещено в файл или направлено пользователю?

Если вы ожидаете, что пользователь предпримет какое-либо действие в результате предупреждения, он должен перейти к STDERR. Если какой-либо нижестоящий скрипт может быть сработал из-за предупреждения, он должен перейти к STDERR.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top