Чи є офіційні POSIX, GNU чи інші вказівки щодо того, де слід надрукувати звіти про хід роботи та реєстрацію інформації (такі як "Doing foo; foo done")? Особисто я схильний писати їх до stderr, щоб я міг перенаправляти stdout і отримувати лише фактичний вихід програми. Нещодавно мені сказали, що це не є хорошою практикою, оскільки звіти про прогрес насправді не є помилками, а на stderr слід надрукувати лише повідомлення про помилки.
Обидві позиції мають сенс, і, звичайно, ви можете вибрати ту чи іншу залежно від деталей того, що ви робите, але я хотів би знати, чи є для цього загальноприйнятий стандарт. Мені не вдалося знайти жодних конкретних правил у POSIX, стандартах кодування GNU чи будь-яких інших таких загальновизнаних списках найкращих практик.
У нас є кілька подібних запитань, але вони не вирішують цю точну проблему:
Коли використовувати перенаправлення на stderr у скриптах оболонки : Прийнята відповідь підказує, що я прагну робити, тримати остаточний вихід програми на stdout і все інше на stderr. Однак це просто представлено як думка користувача, хоча і підтримується аргументами.
Чи повинно повідомлення про використання переходити до stderr або stdout? : Це специфічно для довідок, але цитує стандарт кодування GNU. Це те, що я шукаю, не обмежуючись лише довідками.
Отже, чи існують офіційні правила, де слід надрукувати звіти про хід роботи та інші інформаційні повідомлення (які не є частиною фактичного результату програми)?
stdout
насправді є безпечним і правильним способом друкування спінерів та інших інформативних повідомлень, але, як стверджує багато програмістів, «Тиша золота. Нічого не виведіть, якщо все добре ». так насправді, STDERR завжди використовується , щоб зробити це з - за нечіткого визначення , а також стандартний висновок може розірвати трубу sequence.for офіційне керівництво
stderr
для повідомлення повідомлень про помилки, за винятком випадків, коли використовується --verbose
прапор, в який також включаються звіти про хід роботи.
stdout
разом із результатами - безпечний спосіб зробити результати марними. Якщо вам коли-небудь потрібно передавати результати в якусь іншу програму, зазначена програма повинна буде відокремити результати від спінерів. Крім того, якщо ви переймете висновок на файл, ви не зможете побачити спінери. ІМХО.