Ответ на вопрос: есть разные способы печати stderr в python, но это зависит от того, 1.) какую версию Python мы используем 2.) какой именно вывод мы хотим получить.
Различие между print и функцией записи stderr :
stderr : stderr (стандартная ошибка) - это канал, который встроен в каждую систему UNIX / Linux, когда ваша программа аварийно завершает работу и выводит отладочную информацию (например, трассировку в Python), она переходит к stderr труба.
Распечатать : print - это оболочка, которая форматирует входные данные (входные данные - это пробел между аргументом и символом новой строки в конце), а затем вызывает функцию записи для данного объекта, по умолчанию этот объект является sys.stdout, но мы можем передать файл, т. е. мы также можем напечатать вход в файл.
Python2: если мы используем python2, то
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Завершающая запятая в Python2 в Python3 стала параметром, поэтому если мы используем запятые, чтобы избежать перехода на новую строку после печати, в Python3 это будет выглядеть как print ('Text to print', end = ''), что является синтаксической ошибкой в Python2 ,
http://python3porting.com/noconv.html
Если мы проверим тот же сценарий выше в python3:
>>> import sys
>>> print("hi")
hi
В Python 2.6 есть возможность импорта в функцию в будущем . Поэтому, чтобы избежать любых синтаксических ошибок и других различий, мы должны начинать любой файл, в котором мы используем print (), из будущего импорта print_function. Будущее импорта работает только в Python 2.6 и позже, поэтому для Python 2.5 и выше у вас есть два варианта. Вы можете преобразовать более сложную печать во что-то более простое или использовать отдельную функцию печати, которая работает как в Python2, так и в Python3.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
Случай: Следует отметить, что sys.stderr.write () или sys.stdout.write () (stdout (стандартный вывод) - это канал, встроенный в каждую систему UNIX / Linux), не заменяет печать, но да мы можем использовать его как альтернативу в некоторых случаях. Print - это оболочка, которая оборачивает ввод пробелом и символом новой строки в конце и использует функцию записи для записи. По этой причине sys.stderr.write () работает быстрее.
Примечание: мы также можем отследить и отладить, используя Logging
#test.py
import logging
logging.info('This is the existing protocol.')
FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s"
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning("Protocol problem: %s", "connection reset", extra=d)
https://docs.python.org/2/library/logging.html#logger-objects