Uživatelské nástroje

Nástroje pro tento web


stderr

stderr (Standard Error)

stderr je standardní datový proud určený pro chybové zprávy. V systémech typu Unix a Windows má přiřazen deskriptor souboru (file descriptor) 2. Ačkoliv se standardně zobrazuje na stejné obrazovce jako stdout, jedná se o technicky nezávislý kanál.

1. Proč existuje stderr?

Představte si, že používáte pipeline ke zpracování dat:

  • cat data.txt | sort | uniq > vysledek.txt

Pokud by během čtení souboru došlo k chybě (např. nedostatečná práva) a tato chyba by byla poslána do `stdout`, stala by se součástí vašich výsledných dat. Díky tomu, že chyba odteče přes stderr, uvidíte ji na obrazovce, ale vaše výsledná data v souboru vysledek.txt zůstanou „čistá“.

2. Manipulace se stderr v shellu

V příkazové řádce můžete se stderr pracovat pomocí čísla jeho deskriptoru (2):

Přesměrování chyb do souboru

Pokud chcete chyby uložit zvlášť a výsledky nechat na obrazovce:

  • prikaz 2> chyby.log

Úplné potlačení chyb

Často při skriptování nechceme, aby uživatel viděl varování, která nejsou kritická. Chyby pošleme do „černé díry“ (/dev/null):

  • prikaz 2> /dev/null

Sloučení do jednoho proudu

Častý zápis pro uložení všeho (dat i chyb) do jednoho souboru:

  • prikaz > vse.log 2>&1

(Znamená to: „Pošli proud 2 tam, kam právě teče proud 1.“)

3. Rozdíly mezi standardními proudy

Proud Jméno Deskriptor Cíl (Standardně)
stdin Standard Input 0 Klávesnice
stdout Standard Output 1 Terminál (Monitor)
stderr Standard Error 2 Terminál (Monitor)

4. Využití v programování

Programátoři by měli striktně rozlišovat, kam co vypisují:

  • Python: sys.stderr.write(„Chyba!“) (místo klasického print())
  • C: fprintf(stderr, „Chyba!“);
  • Java: System.err.println(„Chyba!“);

Při správném použití může monitorovací systém (např. v rámci MLOps) automaticky zachytit pouze zprávy ze stderr a okamžitě poslat notifikaci správci, zatímco běžné logy ze stdout jen ukládá k pozdější analýze.

5. Buffering (Vyrovnávací paměť)

Důležitý rozdíl mezi `stdout` a `stderr` je v tom, jak se data vypisují:

  • stdout je často buffered (data se hromadí a vypíšou se až po naplnění určité kapacity nebo ukončení řádku), aby se šetřil výkon.
  • stderr je obvykle unbuffered (data se vypisují okamžitě). Je to proto, aby v případě pádu programu byla chybová hláška vidět hned a nezůstala viset v paměti.
Zajímavost: Pokud v Linuxu napíšete příkaz, který neexistuje, chybová zpráva „-bash: xyz: command not found“ pochází právě ze stderr.

Zpět na Linux

stderr.txt · Poslední úprava: autor: admin