Ce face os.pipe()
pipe() returnează doi descriptori: r pentru citire și w pentru scriere. Datele scrise în w pot fi citite din r, de obicei de un proces copil creat cu fork(). Când toate capetele de scriere sunt închise, citirea returnează b"" (sfârșit).
Pentru comunicarea cu alte programe, subprocess creează și gestionează singur aceste țevi (stdout=subprocess.PIPE).
Ce returnează
Un tuplu (fd_citire, fd_scriere).
Exemple
Exemplul 1: Mesaj de la procesul copil
import os
r, w = os.pipe()
pid = os.fork()
if pid == 0:
os.close(r)
os.write(w, "rezultat calculat de copil: 42".encode())
os.close(w)
os._exit(0)
os.close(w)
with os.fdopen(r) as citire:
print(citire.read())
os.waitpid(pid, 0)
Rezultat
rezultat calculat de copil: 42
Greșeli frecvente
- Uiți să închizi capătul de scriere în procesul care citește:
read()nu primește niciodată sfârșitul și se blochează.
Comenzi înrudite
os.fork() și os.register_at_fork(): Creează o copie a procesului curent; ambele continuă de la același rând.os.fdopen(): Transformă un descriptor numeric într-un obiect fișier obișnuit.subprocess.Popen: communicate(), wait() și poll(): Pornește un program și îl controlează în timp ce rulează: date de intrare, ieșire pe bucăți, așteptare.os.mkfifo(), mknod(), major(), minor() și makedev(): Creează canale cu nume (FIFO) și fișiere speciale de dispozitiv.