Existe-t-il une indication quant à l'utilisation de l'erreur lors de l'écriture d'une application en ligne de commande? À ma grande surprise, je n'ai rien trouvé sur Google.
En particulier, la question qui m'inquiète en ce moment est de savoir s'il faut utiliser stdout
ou stderr
quand l'utilisateur a appelé le programme avec des arguments illégaux. Cependant, une réponse plus complète est très appréciée car ce ne sera sûrement pas le seul cas dans lequel une règle claire est nécessaire pour écrire un programme qui se comporte de la manière attendue par l'utilisateur.
Réponses:
Oui, affichez un message
stderr
lorsque les mauvais arguments sont utilisés. Et si cela entraîne également la fermeture de l'application, quittez avec un état de sortie différent de zéro.Vous devez utiliser le flux d'erreurs standard pour les messages de diagnostic ou pour l'interaction avec l'utilisateur. Les messages de diagnostic incluent des messages d'erreur, des avertissements et d'autres messages qui ne font pas partie de la sortie de l'utilitaire lorsqu'il fonctionne correctement («correctement» signifiant qu'il ne se passe rien d'exceptionnel, comme les fichiers non trouvés ou quoi que ce soit).
De nombreux shells (tous?) Affichent des invites, les types d'utilisateurs, les menus, etc.
stderr
pour que la redirectionstdout
ne vous empêche pas d'interagir avec le shell de manière significative.Voici un article de blog sur ce sujet:
"S'identifier" signifie simplement dire "Hé! C'est moi qui parle! Cela a mal tourné: [...]":
Faire ceci
stderr
est préférable, car il pourrait autrement être lu par ce qui était en train de lirestdout
(mais nous ne le faisons pas dels
toute façon , n'est-ce pas ?).la source
À partir des spécifications POSIX pour les flux standard:
En d'autres termes, les erreurs, les informations de débogage et tout ce qui relève de la catégorie de diagnostic sont inclus
stderr
.Voir la question connexe pour plus d'informations: les rapports de progression / informations de journalisation appartiennent-ils à stderr ou stdout?
la source