os.isatty(), ttyname(), ctermid() și device_encoding() în Python

Verifică dacă un descriptor este un terminal și află numele și codificarea lui.

Sintaxă
os.isatty(fd)
os.ttyname(fd)
os.ctermid()
os.device_encoding(fd)

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