¿Existen ventajas o desventajas específicas en print
o stderr
?print vs stderr
Respuesta
Son solo dos cosas diferentes. print
generalmente va a sys.stdout
. Vale la pena saber la diferencia entre stdin
, stdout
, and stderr
- todos tienen sus usos.
En particular, stdout
se debe utilizar para la salida de programa normal, mientras que stderr
se debe reservar solo para mensajes de error (ejecución anormal del programa). Existen utilidades para dividir estas transmisiones, lo que permite a los usuarios de su código diferenciar entre salida normal y errores.
print
puede imprimir en cualquier objeto similar a un archivo, incluido sys.stderr
.
print >> sys.stderr, 'Text'
Las ventajas de utilizar sys.stderr
de errores en lugar de sys.stdout
son:
- Si el usuario redirigir la salida estándar a un archivo, ella todavía ve errores en la pantalla.
- No está almacenado en el búfer, por lo que si se redirige
sys.stderr
a un archivo de registro, hay menos posibilidades de que el programa se bloquee antes de que se haya registrado el error.
Esta respuesta escrita con Python 2 en mente. Para Python 3, use print('Text', file=sys.stderr)
en su lugar.
+1. ¡estupendo! No estaba al tanto de esta propiedad de 'imprimir' – db42
Tenga cuidado: aquí hay algunas sutilezas, incluso si las transmisiones van a dispositivos interactivos o no. La mayor sorpresa es que en Python 3 stderr se almacena en línea (al menos en Unix). Por ejemplo, en una ventana de terminal, la siguiente imprime un número cada dos segundos en Python 2:
for n in range(5):
print >> sys.stderr, n, # final comma to squelch newline character
time.sleep(2)
mientras que en Python 3, los siguientes grabados los números de todos juntos cuando los acabados de bucle:
for n in range(5):
print(n, file=sys.stderr, end='') # print n to sys.stderr with no newline char
time.sleep(2)
Muy interesante. Me pregunto por qué decidieron ir por esa ruta con Python 3. –
Se trata de una línea almacenada en un terminal y completamente almacenada en el búfer cuando se escribe en un archivo. :(FAIL. –
Es útil separar stderr y stdout cuando ejecuta el script redirigiéndolos a diferentes archivos. Normalmente utilizo stderr para los mensajes de registro y para realizar un seguimiento del flujo del programa, pero uso stdout para obtener más mensajes útiles que voy a utilizar más adelante.
Una otra manera de escribir en stderr es como el siguiente ejemplo:
import sys
sys.stderr.write("Error has occurred opening a file!")
¡Genial! :) log = sys.stderr.write; log ("hola") – AME
- 1. Cuándo usar $ stderr vs STDERR en Ruby?
- 2. print() vs sys.stdout.write(): ¿y por qué?
- 3. Guardar stdout, stderr y stdout + stderr sincrónicamente
- 4. JS Fiddle print/alert
- 5. sobrecarga print python
- 6. css print styling
- 7. mPDF auto print issue
- 8. Python 2.7 print() error
- 9. js window.open then print()
- 10. Sobre stdout/stderr redirecciones
- 11. Enviando STDERR al registrador
- 12. Duplicar stdout a stderr
- 13. LLVM stdin/stdout/stderr
- 14. PHP StdErr after Exec()
- 15. print nombre-variable en Matlab
- 16. Print Rails version in views?
- 17. print drupal field_view_field value only
- 18. instrucción PRINT en T-SQL
- 19. Pretty Print SQL en Ruby
- 20. Javascript print bloqueado por chrome
- 21. pretty-print a prolog term
- 22. Pretty-Print JSON en Java
- 23. Pretty Print Distances para iOS
- 24. Redireccionando/redefiniendo print() para Lua
- 25. paramiko combinar stdout y stderr
- 26. ¿A dónde va Java Stderr?
- 27. Redirigir lote stderr al archivo
- 28. Capturando stdout/stderr con NDK
- 29. vim filters y stdout/stderr
- 30. redirección stderr a instancia Logger
También tenga en cuenta que stderres sin búfer, que puede ser útil. – JimB
Me gustaría modificar la redacción de su respuesta para reemplazar "salida de programa" con "salida de programa no textual o no de estado". stderr tampoco debe reservarse para mensajes de error en todos los casos, por ejemplo, un programa que descarga a stdout, que se canaliza a otro programa, pero imprime el progreso de la descarga en stderr (que llega a 'salir' de la tubería). –
@JimB en qué sentido? – JinSnow