Что считается «идеальным» в отношении использования stdout / stderr для вывода в разных ситуациях?

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

Итак, мне было интересно – когда он считается идеальным для использования stdout или stderr в отношении того, что выводит программа, помимо общего вывода и ошибок? Является ли она более зависимой от программы или более общей?

3 Solutions collect form web for “Что считается «идеальным» в отношении использования stdout / stderr для вывода в разных ситуациях?”

Причина того, что разделение stdout и stderr в первую очередь заключается в том, чтобы различать вывод программных данных (которые могут быть сохранены в файле, поданы в конвейер и т. Д.) И диагностики и пуха (которые действительно представляют интерес для человека оператор смотрит на терминал). (Нет автоматического способа сделать то же самое для ввода, но вы можете сделать это с небольшими проблемами, открыв и прочитав управляющее терминальное устройство, а не stdin .) Таким образом, если у вас есть выбор между написанием чего-то на stdout или stderr , лучшая эвристика, вероятно, «будут ли эти данные интересны для другой программы, используя мой вывод?» Однако это может быть зависящим от программ и приложений, и поэтому нет ни одного правила переопределения. (Вот почему есть опции переопределения, такие как 2>&1 и т. Д. В bash .)

Это зависит! Одним из важных факторов является то, что stderr не загружается по умолчанию, так как не хотелось бы потерять сообщение об ошибке для буферизации, когда что-то не удается, в то время как stdout – это строка (терминал) или блок (в противном случае), буферизованный по умолчанию. Это более эффективно, хотя сбои могут привести к потере данных в строках или блоках. Другое – это то, что выводит программа; если что-то испускает какой-либо конкретный формат, скажем, CSV или JSON, смешивая сообщения об ошибках, которые могут повредить его (или требуют кодирования в определенном формате, а затем что произойдет, если есть ошибка, кодирующая его в этом формате abort! abort! abort! ), в то время как в других случаях (система интерактивного типа меню?) сообщения об ошибках смешивания с другим выходом могут не иметь значения.

Всегда думайте, что кто-то поставит вашу программу в какой-то момент:

 $ inputProducer | yourProgram | outputConsumer 

Рассматривая вопрос о том, следует ли направлять что-то в stderr или stdout , важно то, имеет ли это что-то для (generic) outputConsumer или это только усложнит жизнь.

  • Релевантно: stdout
  • Неприемлемо: stderr

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

  • grep, как подавить отображение несогласованного файла?
  • Bash, если скрипт вызывается из терминала echo stdout в терминал, если из cron не выводит эхо-сигнал
  • Выполнять команду в удаленном активном терминале
  • Подавлять сообщения о запуске на stdout?
  • Запись строк в файл с меньшего количества
  • Почему `cat`ing файл в себя стирает его?
  • Скрипт для быстрого тестирования всех клавиш клавиатуры
  • Linux: как перенаправить stdout и stderr в logger?
  • bash: перенаправить stderr в файл и stdout + stderr на экран
  • Будет ли вывод вывода вывода фонового процесса в качестве входного сигнала stdin переднего плана?
  • Какова связь между выходом программы, стандартным выходом и файловыми дескрипторами?
  • Interesting Posts

    Имеет ли смысл безопасное удаление файлов в зашифрованном разделе?

    TAR: лучше пропустить каталог или использовать split

    Действительный брандмауэр iptables в DD-WRT для доступа к Интернету в точке виртуального доступа

    Нет маршрута для размещения через прямой Ethernet, но nmap находит машину

    Форматирование вывода grep при сопоставлении с несколькими файлами

    Смонтируйте сжатый tar-файл и обновите его

    Linux Mint 16: Петра – не может проснуться из спящего режима

    Есть ли инструмент для просмотра торрент-файла?

    Добавьте новый HDD в Azure VM и установите RAID 0

    Почему я не могу загружать модули во время выполнения моего сценария bash, но только при его поиске?

    Ubuntu + nginx, получить информацию о виртуальной машине

    Где записать ошибку?

    Как и где метаданные файловой системы кэшируются в Linux

    Wi-Fi не работает на compaq 6715b работает ubuntu 14.04

    временная метка, время модификации и время создания файла

    Linux и Unix - лучшая ОС в мире.