Czy istnieje oficjalny POSIX, GNU lub inne wytyczne dotyczące tego, gdzie powinny być drukowane raporty z postępu i informacje o logowaniu (takie jak „Doing foo; foo done”)? Osobiście staram się pisać je do stderr, aby móc przekierować standardowe wyjście i uzyskać tylko rzeczywiste wyjście programu. Niedawno powiedziano mi, że nie jest to dobra praktyka, ponieważ raporty postępu nie są tak naprawdę błędami i tylko komunikaty o błędach powinny być drukowane na stderr.
Obie pozycje mają sens i oczywiście możesz wybrać jedną lub drugą w zależności od szczegółów tego, co robisz, ale chciałbym wiedzieć, czy istnieje powszechnie akceptowany standard. Nie byłem w stanie znaleźć żadnych konkretnych reguł w POSIX, standardach kodowania GNU ani żadnej innej tak szeroko akceptowanej listy najlepszych praktyk.
Mamy kilka podobnych pytań, ale nie dotyczą one dokładnie tego problemu:
Kiedy używać przekierowania do stderr w skryptach powłoki : Akceptowana odpowiedź sugeruje, co mam tendencję do robienia, trzymaj końcowe wyjście programu na stdout i cokolwiek innego do stderr. Jest to jednak przedstawione jako opinia użytkownika, choć poparte argumentami.
Czy komunikat o użyciu powinien być przekazywany do stderr czy stdout? : Jest to specyficzne dla wiadomości pomocniczych, ale przytacza standard kodowania GNU. Tego właśnie szukam, nie ograniczając się tylko do wiadomości pomocy.
Czy istnieją więc jakieś oficjalne zasady dotyczące tego, gdzie powinny być drukowane raporty postępu i inne komunikaty informacyjne (które nie są częścią rzeczywistych wyników programu)?
stdout
jest w rzeczywistości bezpiecznym i właściwym sposobem, aby naciskać pokrętła i inne wiadomości informacyjne, ale jak wielu programistów mówi: „Cisza jest złotem. Nie wysyłaj nic, jeśli wszystko jest w porządku. więc w rzeczywistości zawsze używa się stderr ze względu na niejasną definicję, a także stdout może przerwać sekwencję rur. dla oficjalnego przewodnika
stderr
do zgłaszania komunikatów o błędach, z wyjątkiem sytuacji, gdy --verbose
używana jest flaga, w której również uwzględniane są raporty postępu.
stdout
wraz z wynikami to bezpieczny sposób, aby wyniki były bezużyteczne. Jeśli kiedykolwiek będziesz potrzebować przesłać wyniki do innego programu, wspomniany program będzie musiał oddzielić wyniki od pokręteł. Ponadto, jeśli przekierujesz dane wyjściowe do pliku, nie zobaczysz błystek. MOIM ZDANIEM.