¿Cómo imprimo en stderr en Python?

Resuelto wim asked hace 13 años • 17 respuestas

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?

wim avatar Apr 07 '11 07:04 wim
Aceptado

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 eprintahorra algunas repeticiones. Se puede utilizar de la misma forma que la printfunción estándar:

>>> print("Test")
Test
>>> eprint("Test")
Test
>>> eprint("foo", "bar", "baz", sep="---")
foo---bar---baz
MarcH avatar Feb 20 '2013 13:02 MarcH
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).

Mike Ramirez avatar Apr 07 '2011 01:04 Mike Ramirez

Pitón 3:

print("fatal error", file=sys.stderr)

Pitón 2:

print >> sys.stderr, "fatal error"

Respuesta larga

print >> sys.stderrdesapareció 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 writeno es un reemplazo 1:1 de print.

Joachim W avatar Apr 04 '2013 10:04 Joachim W