Ответ на вопрос: есть разные способы печати stderr в python, но это зависит от 1.) какую версию python мы используем 2.) какой именно вывод мы хотим.
Различие между печатью и функцией записи stderr: stderr : stderr (стандартная ошибка) - это канал, который встроен в каждую систему UNIX / Linux, когда ваша программа аварийно завершает работу и выводит отладочную информацию (например, трассировку вPython), он идет в канал stderr.
print : print - это оболочка, которая форматирует входные данные (input - это пробел между аргументом и новой строкой в конце), а затемвызывает функцию записи для данного объекта, по умолчанию этот объект является 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 имеется импорт future для печати в функцию.Поэтому, чтобы избежать любых синтаксических ошибок и других различий, мы должны начинать любой файл, в котором мы используем print (), с future import print_function.Импорт future работает только в 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