¿Hay alguna directriz para usar el error al escribir una aplicación de línea de comandos? Para mi sorpresa, no encontré nada cuando busqué en Google.
En particular, la pregunta que me preocupa en este momento es si usarla stdout
o stderr
cuando el usuario llamó al programa con argumentos ilegales. Sin embargo, una respuesta más completa es muy apreciada porque seguramente este no será el único caso en el que se necesita una regla clara para escribir un programa que se comporte de la manera que espera el usuario.
Respuestas:
Sí, muestra un mensaje sobre
stderr
cuándo se utilizan los argumentos incorrectos. Y si eso también hace que la aplicación salga, salga con un estado de salida distinto de cero.Debe usar el flujo de error estándar para los mensajes de diagnóstico o para la interacción del usuario. Los mensajes de diagnóstico incluyen mensajes de error, advertencias y otros mensajes que no forman parte de la salida de la utilidad cuando funciona correctamente ("correctamente", lo que significa que no ocurre nada excepcional, como archivos que no se encuentran o lo que sea).
Muchos shells (¿todos?) Muestran avisos, lo que el usuario escribe y los menús, etc.
stderr
para que la redirecciónstdout
no le impida interactuar con el shell de una manera significativa.Lo siguiente es de una publicación de blog sobre este tema:
"Identificarse" significa simplemente decir "¡Hola! ¡Soy yo quien habla! Esto salió mal: [...]":
Hacer esto
stderr
es preferible, ya que de lo contrario podría ser leído por lo que sea que esté leyendostdout
(pero no hacemos eso dels
todos modos , ¿ verdad ?).fuente
De las especificaciones POSIX para las transmisiones estándar:
En otras palabras, los errores, la información de depuración y todo lo que cae en la categoría de diagnóstico entra
stderr
.Consulte la pregunta relacionada para obtener más información: ¿Los informes de progreso / información de registro pertenecen a stderr o stdout?
fuente