Відповідь на питання: Існує різний спосіб друкувати stderr в python, але це залежить від 1.) яку версію python ми використовуємо 2.) який точний вихід ми хочемо.
Різниця між функцією запису друку та stderr:
stderr : stderr (стандартна помилка) - це труба, яка вбудовується в кожну систему UNIX / Linux, коли ваша програма виходить з ладу і виводить інформацію про налагодження (як трекбек у Python), вона переходить до stderr труба.
print : print - це обгортка, яка форматує вхідні дані (вхід - це пробіл між аргументом та новим рядком в кінці), а потім викликає функцію запису заданого об'єкта, даний об'єкт за замовчуванням - sys.stdout, але ми можемо передайте файл, тобто ми також можемо надрукувати вхід у файл.
Python2: Якщо ми використовуємо python2, то
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Кінцева кома Python2 має в Python3 стати параметром, тому якщо ми використовуємо трейлісні коми, щоб уникнути нового рядка після друку, це в Python3 буде виглядати як 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) - це не заміна друку, але так ми можемо використовувати його як альтернативу в деяких випадках. Друк - це обгортка, яка обертає вхід пробілом та новою лінією в кінці та використовує функцію запису для запису. Це причина sys.stderr.write () швидше.
Примітка: ми також можемо відстежувати та налагоджувати за допомогою журналу
#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