Ce face sys.stdin, sys.stdout și sys.stderr
sys.stdin este intrarea standard: tastatura sau datele trimise prin | (cat date.txt | python3 script.py). O poți citi toată (read()) sau rând cu rând. sys.stdout este ieșirea normală, unde scrie print; sys.stderr este pentru mesaje de eroare și diagnostic, care rămân vizibile chiar dacă ieșirea normală este redirecționată într-un fișier.
Toate sunt obiecte fișier text; au write(), flush(), isatty() și atributul buffer pentru acces binar.
Exemple
Exemplul 1: Filtru de text: citește din stdin, scrie în stdout
import sys
total = 0
for rand in sys.stdin:
if rand.strip().isdecimal():
total += int(rand)
else:
print(f"Ignor: {rand.strip()!r}", file=sys.stderr)
sys.stdout.write(f"Total: {total}\n")
Rezultat (rulat cu: printf ’10\nabc\n32\n’ | python3 suma.py)
Ignor: 'abc'
Total: 42
Exemplul 2: Scriere directă și flush
import sys
sys.stdout.write("fără rând nou")
sys.stdout.write(" | continuare\n")
sys.stdout.flush()
print(sys.stdout.encoding, sys.stdin.readable(), sys.stderr.writable())
sys.stdout.flush()
sys.stdout.buffer.write("octeți: ș\n".encode())
Rezultat
fără rând nou | continuare
utf-8 True True
octeți: ș
Greșeli frecvente
- Afișezi mesajele de eroare cu
printobișnuit; când ieșirea este redirecționată (> rezultat.txt), erorile ajung în fișier și nu le vezi. Foloseștefile=sys.stderr.
Comenzi înrudite
print(): Afișează unul sau mai multe texte sau valori pe ecran.input(): Citește un rând de text tastat de utilizator.os.dup() și os.dup2(): Duplică un descriptor de fișier; dup2 îl copiază peste un număr ales, de exemplu peste ieșirea standard.os.isatty(), ttyname(), ctermid() și device_encoding(): Verifică dacă un descriptor este un terminal și află numele și codificarea lui.