Obsah
stdout (Standard Output)
stdout je datový proud, do kterého program zapisuje své výsledné informace. V technickém zápisu má tento kanál přiřazen deskriptor souboru (file descriptor) 1. Standardně je tento výstup nasměrován na obrazovku terminálu, kde jej vidí uživatel.
1. Jak stdout funguje?
Když program (např. v Pythonu příkaz print()) vygeneruje text, neposílá ho přímo na monitor. Místo toho ho zapíše do proudu stdout. Operační systém pak rozhodne, kam tento proud poteče:
- Na obrazovku: (výchozí chování) – text se vypíše do okna terminálu.
- Do souboru: – pomocí přesměrování se výstup uloží do textového dokumentu.
- Do dalšího programu: – pomocí pipeline se data předají jako vstup dalšímu nástroji.
2. Přesměrování výstupu (Redirection)
V shellu můžeme stdout snadno ovládat pomocí operátorů:
- Znak `>` (Přepsání): Uloží výstup do souboru. Pokud soubor existuje, jeho obsah se smaže.
- Příklad:
ls > seznam_souboru.txt
- Znak `»` (Připojení): Přidá výstup na konec existujícího souboru.
- Příklad:
echo „Nová zpráva“ » log.txt
3. Rozdíl mezi stdout a stderr
Je klíčové rozlišovat mezi „úspěšným výsledkem“ a „chybou“.
- stdout (1): Obsahuje data, která jste od programu chtěli (např. seznam souborů).
- stderr (2): Obsahuje pouze chybová hlášení (např. „přístup odepřen“).
Díky tomuto oddělení můžete například uložit výsledky do souboru, ale chyby nechat vypsat na obrazovku, aby vás varovaly:
prikaz > vysledek.txt(chyby se stále vypíší na monitor)
4. Spojování stdout a stderr
Někdy chcete uložit úplně všechno do jednoho souboru (např. pro pozdější analýzu logů). K tomu slouží konstrukce:
prikaz > log.txt 2>&1
(Vysvětlení: Proud 2 (stderr) je přesměrován tam, kam teče proud 1 (stdout), a ten teče do souboru log.txt.)
5. stdout v programování
Každý moderní jazyk má standardní výstup jako základní objekt:
- C:
printf(„Ahoj“);(píše do stdout) - Python:
sys.stdout.write(„Text“) - Bash:
echo „Zpráva“
Zajímavost: Existuje speciální „soubor“ /dev/null, který funguje jako černá díra. Pokud chcete, aby program na obrazovku nevypisoval vůbec nic, můžete jeho stdout zahodit:prikaz > /dev/null.
