Подтвердить что ты не робот

Print vs stderr

Существуют ли какие-либо конкретные преимущества или недостатки для print или stderr?

4b9b3361

Ответ 1

Это всего лишь две разные вещи. print обычно переходит в sys.stdout. Стоит знать разницу между stdin, stdout и stderr - все они используют свои возможности.

В частности, для обычного выхода программы следует использовать stdout, тогда как stderr следует резервировать только для сообщений об ошибках (ненормальное выполнение программы). Существуют утилиты для разделения этих потоков, что позволяет пользователям вашего кода различать нормальный выход и ошибки.

Ответ 2

print может печатать на любом файлоподобном объекте, включая sys.stderr.

print >> sys.stderr, 'Text'

Преимущества использования sys.stderr для ошибок вместо sys.stdout:

  • Если пользователь перенаправил stdout в файл, она все еще видит ошибки на экране.
  • Он не буферизирован, поэтому, если sys.stderr перенаправляется в файл журнала, вероятность того, что программа может произойти сбой до того, как будет зарегистрирована ошибка, меньше.

Этот ответ написан на Python 2. Для Python 3 используйте print('Text', file=sys.stderr).

Ответ 3

Будьте осторожны: здесь есть несколько тонкостей, в том числе, идет ли поток к интерактивным устройствам. Самым большим сюрпризом является то, что в Python 3 stderr работает в режиме буферизации (по крайней мере, в Unix). Например, в окне терминала следующее число раз в две секунды выводится на Python 2:

for n in range(5):
    print >> sys.stderr, n,     # final comma to squelch newline character
    time.sleep(2)

тогда как в Python 3, после завершения цикла завершается печать чисел:

for n in range(5):
    print(n, file=sys.stderr, end='')    # print n to sys.stderr with no newline char
    time.sleep(2)

Ответ 4

Полезно разделять stderr и stdout при запуске script путем перенаправления их на разные файлы. Обычно я использую stderr для сообщений журнала и отслеживаю поток программы, но использую stdout для более полезных сообщений, которые я буду использовать позже.

Другим способом записи в stderr является следующий пример:

import sys
sys.stderr.write("Error has occurred opening a file!")