os.get_blocking(), set_blocking(), get_inheritable(), set_inheritable() în Python

Descriptori de fișiere (os) Python 3.4+ (blocking: 3.5+)

Modul blocant al unui descriptor și dacă este moștenit de procesele copil.

Sintaxă
os.get_blocking(fd) / os.set_blocking(fd, bool)
os.get_inheritable(fd) / os.set_inheritable(fd, bool)

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 BlockingIOError când nu sunt date.

Comenzi înrudite