Odpowiedź na pytanie brzmi: Istnieje inny sposób wypisywania stderr w pythonie, ale to zależy od 1.) której wersji python używamy 2.) jakiego dokładnego wyniku chcemy.
Różnica między funkcją drukowania a funkcją zapisu stderr :
stderr : stderr (błąd standardowy) jest potokiem wbudowanym w każdy system UNIX / Linux, gdy twój program ulega awarii i drukuje informacje debugowania (jak traceback w Pythonie), przechodzi do stderr rura.
print : print to opakowanie, które formatuje dane wejściowe (dane wejściowe to spacja między argumentem a znakiem nowej linii na końcu), a następnie wywołuje funkcję zapisu danego obiektu, domyślnie dany obiekt to sys.stdout, ale możemy przekazać plik, tzn. możemy również wydrukować dane wejściowe w pliku.
Python2: Jeśli więc używamy Python2
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Końcowy przecinek w Python2 stał się w Python3 parametrem, więc jeśli użyjemy przecinków końcowych, aby uniknąć nowej linii po wydruku, w Python3 będzie to wyglądać jak print („Text to print”, end = ''), co jest błędem składniowym w Python2 .
http://python3porting.com/noconv.html
Jeśli sprawdzimy to samo powyżej sceario w python3:
>>> import sys
>>> print("hi")
hi
W Pythonie 2.6 istnieje przyszły import umożliwiający drukowanie w funkcji. Aby uniknąć błędów składniowych i innych różnic, powinniśmy uruchomić każdy plik, w którym używamy print (), z przyszłego importu print_function. Przyszłość import działa tylko pod Pythona 2.6 i później, tak dla Pythona 2.5 i wcześniejszych masz dwie opcje. Możesz przekształcić bardziej złożony druk w coś prostszego lub możesz użyć oddzielnej funkcji drukowania, która działa zarówno w Python2, jak i Python3.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
Przypadek: Należy zauważyć, że sys.stderr.write () lub sys.stdout.write () (stdout (standardowe wyjście) jest potokiem wbudowanym w każdy system UNIX / Linux) nie zastępuje drukowania, ale tak w niektórych przypadkach możemy go użyć jako alternatywy. Print to opakowanie, które otacza wejście spacją i znakiem nowej linii na końcu i używa funkcji write do pisania. Z tego powodu sys.stderr.write () jest szybszy.
Uwaga: możemy również śledzić i debugować za pomocą Rejestrowania
#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