Существует ли официальное руководство по POSIX, GNU или другим правилам о том, где следует печатать отчеты о ходе работы и информацию о регистрации (например, «Doing foo; foo done»)? Лично я склонен записывать их в stderr, чтобы я мог перенаправить stdout и получать только фактический вывод программы. Мне недавно сказали, что это нехорошая практика, поскольку отчеты о ходе работы на самом деле не являются ошибками, и в stderr следует печатать только сообщения об ошибках.
Обе позиции имеют смысл, и, конечно, вы можете выбрать одну или другую в зависимости от деталей того, что вы делаете, но я хотел бы знать, есть ли общепринятый стандарт для этого. Мне не удалось найти какие-либо конкретные правила в POSIX, стандартах кодирования GNU или в любом другом широко распространенном списке лучших практик.
У нас есть несколько похожих вопросов, но они не решают эту проблему:
Когда использовать перенаправление на stderr в сценариях оболочки : принятый ответ предполагает, что я склонен делать, сохраняйте окончательный вывод программы на stdout и все остальное на stderr. Тем не менее, это просто представлено как мнение пользователя, хотя и подтверждается аргументами.
Должно ли сообщение об использовании идти в stderr или stdout? Это относится только к справочным сообщениям, но цитирует стандарт кодирования GNU. Это то, что я ищу, но не ограничивается только сообщениями о помощи.
Итак, существуют ли какие-либо официальные правила о том, где следует печатать отчеты о ходе работы и другие информационные сообщения (которые не являются частью фактического результата программы)?
stdout
То же, что сказал Сато Кацура, на самом деле является безопасным и правильным способом печати блесны и других информативных сообщений, но, как говорят многие программисты: «Молчание - это золото. Ничего не выводить, если все хорошо. так что на самом деле stderr всегда используется для этого из-за расплывчатого определения, а также stdout может нарушить последовательность
stderr
для сообщения об ошибках, кроме случаев, когда используется --verbose
флаг, и в этот момент также включаются отчеты о ходе работ.
stdout
вместе с результатами - это безопасный способ сделать результаты бесполезными. Если вам когда-либо понадобится передать результаты в какую-либо другую программу, указанная программа должна будет отделить результаты от счетчиков. Кроме того, если вы перенаправите вывод в файл, вы не сможете увидеть счетчики. ИМХО.