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
os.open(), read(), write(), lseek(), close(), closerange(): Lucrul de nivel jos cu fișierele, prin descriptori numerici, ca în C.os.pipe(): Creează o „țeavă” anonimă: ce scrii la un capăt citești la celălalt.sys.stdin, sys.stdout și sys.stderr: Fluxurile standard: intrarea, ieșirea normală și ieșirea pentru erori.