Ce face os.get_blocking(), set_blocking(), get_inheritable(), set_inheritable()
Un descriptor blocant face ca read() să aștepte până apar date. În mod neblocant (set_blocking(fd, False)), citirea fără date aruncă imediat BlockingIOError, util în bucle de evenimente.
Un descriptor moștenibil rămâne deschis în programele pornite cu exec. Din Python 3.4, descriptorii noi sunt nemoștenibili implicit (din motive de securitate); set_inheritable(fd, True) schimbă asta.
Parametri
| Parametru | Descriere |
|---|---|
fd |
Descriptorul. |
bool |
Noua valoare. |
Ce returnează
get_*: bool. set_*: None.
Exemple
Exemplul 1: Citire neblocantă
import os
r, w = os.pipe()
print(os.get_blocking(r), os.get_inheritable(r))
os.set_blocking(r, False)
try:
os.read(r, 10)
except BlockingIOError:
print("Nu sunt date încă")
os.write(w, b"gata")
print(os.read(r, 10))
os.set_inheritable(w, True)
print(os.get_inheritable(w))
Rezultat
True False
Nu sunt date încă
b'gata'
True
Greșeli frecvente
- Pui un descriptor în mod neblocant și apoi îl citești ca de obicei; primești
BlockingIOErrorcând nu sunt date.
Comenzi înrudite
os.pipe(): Creează o „țeavă” anonimă: ce scrii la un capăt citești la celălalt.Familia os.exec*: execv(), execvp(), execl()...: Înlocuiește programul curent cu alt program; codul de după apel nu mai rulează.os.open(), read(), write(), lseek(), close(), closerange(): Lucrul de nivel jos cu fișierele, prin descriptori numerici, ca în C.