Ce face os.isatty(), ttyname(), ctermid() și device_encoding()
isatty(fd) returnează True dacă descriptorul este conectat la un terminal interactiv. Programele îl folosesc ca să afișeze culori sau bare de progres doar în terminal, nu și când ieșirea este redirecționată într-un fișier. Obiectele fișier au și metoda f.isatty().
ttyname(fd) dă numele dispozitivului terminal (de exemplu /dev/pts/0), ctermid() numele terminalului care controlează procesul, iar device_encoding(fd) codificarea terminalului (sau None dacă nu este terminal).
Parametri
| Parametru | Descriere |
|---|---|
fd |
Descriptorul (0 = intrarea, 1 = ieșirea, 2 = erorile). |
Ce returnează
Bool, text sau None.
Exemple
Exemplul 1: Ieșire redirecționată
La construirea acestei pagini, ieșirea exemplului este capturată, nu afișată într-un terminal.
import os, sys
print(os.isatty(sys.stdout.fileno()), sys.stdout.isatty())
print(os.device_encoding(sys.stdout.fileno()))
r, w = os.pipe()
try:
os.ttyname(r)
except OSError as e:
print("Nu este terminal:", e.strerror)
Rezultat
False False
None
Nu este terminal: Inappropriate ioctl for device
Exemplul 2: Într-un terminal
import os, sys
fd = sys.stdout.fileno()
print(os.isatty(fd), os.ttyname(fd), os.ctermid(), os.device_encoding(fd))
Rezultat posibil (rulat direct în terminal, pe Linux)
True /dev/pts/0 /dev/tty UTF-8
Greșeli frecvente
- Afișezi coduri de culori fără să verifici
isatty(); în fișierele de jurnal apar caractere ca\x1b[31m.
Comenzi înrudite
sys.stdin, sys.stdout și sys.stderr: Fluxurile standard: intrarea, ieșirea normală și ieșirea pentru erori.shutil.get_terminal_size() și os.get_terminal_size(): Lățimea și înălțimea ferestrei terminalului, în caractere.os.openpty(), forkpty(), login_tty() și funcțiile pentru pseudo-terminale: Creează pseudo-terminale, prin care un program poate controla altul ca și cum ar fi un utilizator la tastatură.