os.pipe() în Python

Creează o „țeavă” anonimă: ce scrii la un capăt citești la celălalt.

Sintaxă
r, w = os.pipe()

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