Мой босс сказал мне посмотреть на старый код, где все отправляется на stderr. Я знаю, что stderr должен иметь предупреждения и ошибки, но когда они должны действительно пойти на stdout вместо этого?Когда использовать sys.stdout вместо sys.stderr?
Эта программа является сервисом. Некоторые сообщения, которые он отправляет в stderr:
if pid is None:
message = "pidfile {0} is not running. \n"
sys.stderr.write(message.format(self.pidfile))
Так что это один выход, не так ли? Сообщение об успешном завершении или нет должно идти в stdout, потому что это не ошибка?
А потом я получил еще один, который является исключением:
except OSError as err:
sys.stderr.write('fork #1 failed: {0}\n'.format(err))
sys.exit(1)
Это один как исключение, так что она должна идти к STDERR, потому что это ошибка? Или он должен идти в stdout, потому что это выходное сообщение, просто говорящее, что программа не удалась?
Я знаю, что такое stdout и stderr --- Я читал совсем немного, прежде чем спрашивать. Моя проблема здесь в том, что я могу идентифицировать , которые сообщения должны идти в stderr --- просто фатальные ошибки или любое сообщение об ошибке?
Оба примера являются сообщениями об ошибках, но один из них - это просто «Программа не работает». У меня возникли проблемы с выбором того, куда следует отправлять такое сообщение.
Возможный дубликат [confused about stdin, stdout и stderr?] (Http://stackoverflow.com/questions/3385201/confused-about-stdin-stdout-and-stderr) – wpercy
Неустранимая ошибка, безусловно, должна идти в stderr. Нормальный выход должен идти в стандартный вывод. Для информационных сообщений есть серая область, но в общем случае они не должны идти на stdout, если они делают вывод непригодным. Люди часто направляют stdout в файл и stderr либо в терминал, либо в файл журнала. Поэтому вам нужно решить, какое разделение имеет наибольший смысл. –
@TomKarzes: опубликуйте это как ответ. Более информативный, чем дуб Q. –