РЕДАКТИРОВАТЬ В заднем плане, я думаю, что потенциальная путаница с изменением sys.stderr и отсутствием обновленного поведения делает этот ответ не таким хорошим, как использование простой функции, на которую указывали другие.
Использование только частичного позволяет сэкономить 1 строку кода. Потенциальная путаница не стоит сохранять 1 строку кода.
оригинал
Чтобы сделать это еще проще, вот версия, в которой используется «частичный», что очень помогает при переносе функций.
from __future__ import print_function
import sys
from functools import partial
error = partial(print, file=sys.stderr)
Затем вы используете это так
error('An error occured!')
Вы можете проверить, что он печатает в stderr, а не в stdout, выполнив следующие действия (переопределение кода из http://coreygoldberg.blogspot.com.au/2009/05/python-redirect-or-turn-off-stdout-and.html):
# over-ride stderr to prove that this function works.
class NullDevice():
def write(self, s):
pass
sys.stderr = NullDevice()
# we must import print error AFTER we've removed the null device because
# it has been assigned and will not be re-evaluated.
# assume error function is in print_error.py
from print_error import error
# no message should be printed
error("You won't see this error!")
Недостатком этого является частичное присваивает значение sys.stderr для функции-оболочки во время создания. Это означает, что , если вы перенаправите stderr позже, это не повлияет на эту функцию.
Если вы планируете перенаправить stderr, используйте метод ** kwargs, упомянутый aaguirre на этой странице.