Gibt es eine Richtlinie, wann der Fehler beim Schreiben einer Befehlszeilenanwendung verwendet werden soll? Zu meiner Überraschung habe ich beim Googeln nichts gefunden.
Insbesondere ist die Frage, mit der ich mich gerade befasse, ob ich das Programm verwenden soll stdout
oder stderr
wann der Benutzer das Programm mit illegalen Argumenten aufgerufen hat. Eine umfassendere Antwort wird jedoch sehr geschätzt, da dies sicherlich nicht der einzige Fall ist, in dem eine klare Regel erforderlich ist, um ein Programm zu schreiben, das sich so verhält, wie es vom Benutzer erwartet wird.
Antworten:
Ja, zeigen Sie eine Meldung an,
stderr
wenn die falschen Argumente verwendet werden. Wenn dies auch dazu führt, dass die Anwendung beendet wird, beenden Sie sie mit einem Exit-Status ungleich Null.Sie sollten den Standardfehlerstrom für Diagnosemeldungen oder für die Benutzerinteraktion verwenden. Zu den Diagnosemeldungen gehören Fehlermeldungen, Warnungen und andere Meldungen, die nicht Teil der Ausgabe des Dienstprogramms sind, wenn es ordnungsgemäß funktioniert ("korrekt" bedeutet, dass nichts Außergewöhnliches passiert, z. B. nicht gefundene Dateien oder was auch immer).
Viele Shells (alle?) Zeigen Eingabeaufforderungen, die Benutzertypen, Menüs usw. an,
stderr
damit die Umleitung Siestdout
nicht daran hindert, auf sinnvolle Weise mit der Shell zu interagieren.Folgendes stammt aus einem Blogbeitrag zu diesem Thema:
Sich zu identifizieren bedeutet einfach zu sagen "Hey! Ich rede! Das ging schief: [...]":
Dies zu tun
stderr
ist vorzuziehen, da es sonst von dem gelesen werden könnte, was gerade gelesen wurdestdout
(aber wir machen dasls
sowieso nicht , oder?).quelle
Aus den POSIX-Spezifikationen für die Standard-Streams:
Mit anderen Worten, Fehler, Debugging-Informationen und alles, was in die Diagnosekategorie fällt, werden behandelt
stderr
.Weitere Informationen finden Sie in der entsprechenden Frage: Gehören Fortschrittsberichte / Protokollierungsinformationen zu stderr oder stdout?
quelle