os.dup() și os.dup2() în Python

Duplică un descriptor de fișier; dup2 îl copiază peste un număr ales, de exemplu peste ieșirea standard.

Sintaxă
nou = os.dup(fd)
os.dup2(fd, fd_tinta, inheritable=True)

Ce face os.dup() și os.dup2()

dup(fd) creează un descriptor nou care indică același fișier deschis. dup2(fd, tinta) face ca tinta să indice același fișier ca fd (închizând întâi ce era la tinta). Cu dup2(fisier, 1) redirecționezi ieșirea standard a procesului, inclusiv a programelor C și a proceselor copil, nu doar a lui print.

Parametri

Parametru Descriere
fd Descriptorul copiat.
fd_tinta Pentru dup2: numărul înlocuit.

Ce returnează

Noul descriptor.

Exemple

Exemplul 1: Redirecționarea ieșirii standard într-un fișier

import os, sys
salvat = os.dup(1)
fd = os.open("iesire.txt", os.O_WRONLY | os.O_CREAT | os.O_TRUNC)
sys.stdout.flush()
os.dup2(fd, 1)
os.system("echo scris de un program extern")
print("scris de print", flush=True)
os.dup2(salvat, 1)
os.close(fd)
with open("iesire.txt") as f:
    print("În fișier:", f.read().splitlines())

Rezultat

În fișier: ['scris de un program extern', 'scris de print']

Greșeli frecvente

  • Redirecționezi descriptorul 1 fără sys.stdout.flush() înainte; textul rămas în tamponul lui Python ajunge în locul greșit.

Comenzi înrudite