Czy istnieją wytyczne, kiedy należy użyć błędu podczas pisania aplikacji wiersza polecenia? Ku mojemu zdziwieniu, nie znalazłem niczego, przeglądając go w Google.
W szczególności pytanie, które mnie teraz interesuje, brzmi: czy użyć stdout
lub stderr
kiedy użytkownik wywołał program z nielegalnymi argumentami. Jednak bardziej doceniana jest bardziej kompleksowa odpowiedź, ponieważ z pewnością nie będzie to jedyny przypadek, w którym do napisania programu zachowującego się w sposób zgodny z oczekiwaniami użytkownika potrzebna jest jasna reguła.
Odpowiedzi:
Tak, wyświetlaj komunikat,
stderr
gdy używane są nieprawidłowe argumenty. A jeśli spowoduje to również zamknięcie aplikacji, wyjdź z niezerowym statusem wyjścia.Powinieneś używać standardowego strumienia błędów do komunikatów diagnostycznych lub interakcji użytkownika. Komunikaty diagnostyczne obejmują komunikaty o błędach, ostrzeżenia i inne komunikaty, które nie są częścią danych wyjściowych narzędzia, gdy działa ono poprawnie („poprawnie” oznacza, że nie dzieje się nic wyjątkowego, na przykład nie znaleziono plików lub cokolwiek to może być).
Wiele powłok (wszystkie?) Wyświetla monity, typy użytkowników, menu itp.
stderr
, Aby przekierowaniestdout
nie powstrzymało cię od interakcji z powłoką w znaczący sposób.Poniżej znajduje się post z bloga na ten temat:
„Identyfikacja siebie” oznacza po prostu powiedzenie „Hej! To ja mówię! To poszło nie tak: [...]”:
Robi to na
stderr
korzystne, gdyż w przeciwnym razie może to być odczytane przez co czytałem nastdout
(ale nie rób tego przyls
każdym razie , prawda?).źródło
Ze specyfikacji POSIX dla standardowych strumieni:
Innymi słowy, błędy, informacje debugowania i wszystko, co należy do kategorii diagnostycznej, obejmuje
stderr
.Zobacz podobne pytanie, aby uzyskać więcej informacji: czy raporty postępu / informacje o logowaniu należą do stderr czy stdout?
źródło