Я работаю над рефакторингом некоторых скриптов Python, предназначенных для запуска из командной строки. Сценарии используют ведение журнала, в результате чего некоторые сообщения записываются в STDERR (среди прочего). Интересно, уместно ли для программы в Linux выводить в STDERR, но при этом возвращать нулевой (успешный) статус выхода. Я думал, что к STDERR следует обращаться только в том случае, если статус выхода не равен нулю.
П.С. Мне нужно захватить/обработать вывод из скриптов, и я хочу сделать это "правильно".
Да, программы могут выводить стандартную ошибку и по-прежнему возвращать нулевой статус выхода. Вы найдете множество спецификаций утилит POSIX, в которых указано, что «Стандартная ошибка должна использоваться только для диагностических сообщений ».
Наглядным примером программы, которая выводит в STDERR и возвращает 0, являетсяcrontab
. Попробуйте
EDITOR=nano crontab -e 2> stderr.out; echo $?
Не изменяйте файл cron и выйдите из редактора. 0
будет отражено, но в stderr.out
будет какое-то сообщение, например (в моем случае)
no crontab for user - using an empty one
No modification made