A resposta à pergunta é: Há uma maneira diferente de imprimir stderr em python, mas isso depende de 1.) qual versão do python estamos usando 2.) qual saída exata queremos.
A diferença entre a função de gravação print e stderr:
stderr : stderr (erro padrão) é um pipe que é incorporado em todos os sistemas UNIX / Linux, quando seu programa trava e imprime informações de depuração (como um traceback em Python), ele vai para o stderr tubo.
print : print é um invólucro que formata as entradas (a entrada é o espaço entre o argumento e a nova linha no final) e, em seguida, chama a função de gravação de um determinado objeto, o objeto fornecido por padrão é sys.stdout, mas podemos passar um arquivo, ou seja, também podemos imprimir a entrada em um arquivo.
Python2: Se estamos usando python2, então
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
A vírgula à direita do Python2 no Python3 se tornou um parâmetro; portanto, se usarmos vírgulas à direita para evitar a nova linha após uma impressão, no Python3 será semelhante à impressão ('Text to print', end = ''), que é um erro de sintaxe no Python2. .
http://python3porting.com/noconv.html
Se verificarmos o mesmo sceario acima em python3:
>>> import sys
>>> print("hi")
hi
No Python 2.6, há uma importação futura para tornar a impressão em uma função. Portanto, para evitar erros de sintaxe e outras diferenças, devemos iniciar qualquer arquivo em que usamos print () com a importação futura print_function. A importação futura funciona apenas no Python 2.6 e posterior; portanto, no Python 2.5 e versões anteriores, você tem duas opções. Você pode converter a impressão mais complexa para algo mais simples ou usar uma função de impressão separada que funcione no Python2 e no Python3.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
Caso: Observe que sys.stderr.write () ou sys.stdout.write () (stdout (saída padrão) é um canal incorporado a todos os sistemas UNIX / Linux) não substitui a impressão, mas sim podemos usá-lo como uma alternativa em alguns casos. Imprimir é um invólucro que agrupa a entrada com espaço e nova linha no final e usa a função de gravação para escrever. Esta é a razão pela qual sys.stderr.write () é mais rápido.
Nota: também podemos rastrear e depurar usando o Log
#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