Есть ли рекомендация, когда использовать ошибку при написании приложения командной строки? К моему удивлению, я ничего не нашел, когда гуглял.
В частности, вопрос, который меня сейчас интересует, заключается в том, использовать ли stdout
или stderr
когда пользователь вызвал программу с недопустимыми аргументами. Тем не менее, более полный ответ очень ценится, потому что это, безусловно, не единственный случай, когда необходимо написать четкое правило для написания программы, которая ведет себя так, как этого ожидает пользователь.
Ответы:
Да, отображать сообщение,
stderr
когда используются неправильные аргументы. И если это также приводит к закрытию приложения, выйдите с ненулевым статусом выхода.Вы должны использовать стандартный поток ошибок для диагностических сообщений или для взаимодействия с пользователем. Диагностические сообщения включают сообщения об ошибках, предупреждения и другие сообщения, которые не являются частью вывода утилиты, когда она работает правильно («правильно», что означает, что ничего исключительного не происходит, например, файлы не найдены или что-то еще может быть).
Многие оболочки (все?) Отображают подсказки, какие пользовательские типы, меню и т. Д.,
stderr
Чтобы перенаправлениеstdout
не помешало вам осмысленно взаимодействовать с оболочкой.Следующее из сообщения в блоге на эту тему:
«Идентифицировать себя» означает просто сказать «Эй! Это я говорю! Это пошло не так: [...]»:
Делать это
stderr
предпочтительно, так как это могло бы быть прочитано тем, кто читалstdout
(но мы такls
или иначе не делаем этого , не так ли?).источник
Из спецификации POSIX для стандартных потоков:
Другими словами, ошибки, информация об отладке и все, что попадает в категорию диагностики, входит в
stderr
.См. Связанный вопрос для получения дополнительной информации: отчеты о проделанной работе / информация о регистрации относятся к stderr или stdout?
источник