====== 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í [[it_encyklopedie:pipeline|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''. [[it_encyklopedie:linux_rozcestnik|Zpět na Linux]]