¿Cómo imprimo en stderr en Python?
Hay varias formas de escribir en stderr:
print >> sys.stderr, "spam" # Python 2 only.
sys.stderr.write("spam\n")
os.write(2, b"spam\n")
from __future__ import print_function
print("spam", file=sys.stderr)
¿Cuáles son las diferencias entre estos métodos? ¿Qué método debería preferirse?
Encontré que este es el único breve, flexible, portátil y legible:
import sys
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
La función opcional eprint
ahorra algunas repeticiones. Se puede utilizar de la misma forma que la print
función estándar:
>>> print("Test")
Test
>>> eprint("Test")
Test
>>> eprint("foo", "bar", "baz", sep="---")
foo---bar---baz
import sys
sys.stderr.write()
Es mi elección, simplemente más legible y que dice exactamente lo que pretendes hacer y portátil entre versiones.
Editar: ser 'pythonic' es un tercer pensamiento para mí sobre la legibilidad y el rendimiento... con estas dos cosas en mente, con Python el 80% de su código será pitónico. la comprensión de listas es lo "importante" que no se usa con tanta frecuencia (legibilidad).
Pitón 3:
print("fatal error", file=sys.stderr)
Pitón 2:
print >> sys.stderr, "fatal error"
Respuesta larga
print >> sys.stderr
desapareció en Python3.
http://docs.python.org/3.0/whatsnew/3.0.html dice:
Viejo
print >> sys.stderr, "fatal error"
nuevo:print("fatal error", file=sys.stderr)
Para muchos de nosotros, resulta algo antinatural relegar el destino al final del comando. La alternativa
sys.stderr.write("fatal error\n")
Parece más orientado a objetos y va elegantemente de lo genérico a lo específico. Pero tenga en cuenta que write
no es un reemplazo 1:1 de print
.