La respuesta a la pregunta es: hay diferentes maneras de imprimir stderr en python, pero eso depende de 1.) qué versión de python estamos usando 2.) qué salida exacta queremos.
La diferencia entre imprimir y la función de escritura de stderr :
stderr : stderr (error estándar) es una tubería integrada en todos los sistemas UNIX / Linux, cuando su programa se bloquea e imprime información de depuración (como un rastreo en Python), va al stderr tubo.
impresión : print es un contenedor que formatea las entradas (la entrada es el espacio entre el argumento y la nueva línea al final) y luego llama a la función de escritura de un objeto dado, el objeto dado por defecto es sys.stdout, pero podemos pasar un archivo, es decir, podemos imprimir la entrada en un archivo también.
Python2: si estamos usando python2 entonces
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
La coma final de Python2 se ha convertido en Python3 en un parámetro, por lo que si usamos comas finales para evitar la nueva línea después de una impresión, en Python3 se verá como print ('Text to print', end = ''), que es un error de sintaxis en Python2 .
http://python3porting.com/noconv.html
Si verificamos lo mismo arriba del escenario en python3:
>>> import sys
>>> print("hi")
hi
Bajo Python 2.6 hay una importación futura para imprimir en una función. Por lo tanto, para evitar cualquier error de sintaxis y otras diferencias, debemos comenzar cualquier archivo en el que usemos print () con la función de importación futura print_function. La importación futura solo funciona con Python 2.6 y versiones posteriores, por lo que para Python 2.5 y versiones anteriores tiene dos opciones. Puede convertir la impresión más compleja en algo más simple, o puede usar una función de impresión separada que funciona tanto en Python2 como en Python3.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
Caso: Tenga en cuenta que sys.stderr.write () o sys.stdout.write () (stdout (salida estándar) es una tubería integrada en todos los sistemas UNIX / Linux) no es un reemplazo para la impresión, pero sí podemos usarlo como alternativa en algún caso. Print es un contenedor que envuelve la entrada con espacio y nueva línea al final y utiliza la función de escritura para escribir. Esta es la razón por la que sys.stderr.write () es más rápido.
Nota: también podemos rastrear y depurar usando 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