Ce face os.posix_spawn() și os.posix_spawnp()
posix_spawn() creează un proces nou care rulează programul dat, fără să copieze întâi memoria Python (ca fork), deci este mai rapid pentru procese mari. posix_spawnp() caută programul în PATH. Returnează PID-ul; aștepți terminarea cu os.waitpid().
file_actions descrie operații pe descriptori făcute în copil înainte de pornire: (os.POSIX_SPAWN_OPEN, fd, cale, flaguri, mod), (os.POSIX_SPAWN_DUP2, fd, fd_nou), (os.POSIX_SPAWN_CLOSE, fd). subprocess îl folosește intern când este posibil.
Parametri
| Parametru | Descriere |
|---|---|
cale / program |
Programul. |
argumente, env |
Lista de argumente și dicționarul de mediu. |
file_actions |
Operații pe descriptori în copil. |
Ce returnează
PID-ul procesului nou.
Exemple
Exemplul 1: Program cu ieșirea redirecționată într-un fișier
import os
actiuni = [(os.POSIX_SPAWN_OPEN, 1, "iesire.txt", os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o644)]
pid = os.posix_spawnp("echo", ["echo", "salut din posix_spawnp"], os.environ, file_actions=actiuni)
os.waitpid(pid, 0)
pid = os.posix_spawn("/bin/sh", ["sh", "-c", "exit 5"], {})
print(os.waitstatus_to_exitcode(os.waitpid(pid, 0)[1]))
with open("iesire.txt") as f:
print(f.read().strip())
Rezultat
5
salut din posix_spawnp
Greșeli frecvente
- Dai un dicționar de mediu gol lui
posix_spawnp: programul nu mai arePATHși programele lui externe nu sunt găsite.
Comenzi înrudite
Familia os.spawn*: spawnv(), spawnlp()...: Pornește un program nou ca proces separat; variante vechi, înlocuite de subprocess.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.wait(), waitpid(), wait3(), wait4(), waitid() și waitstatus_to_exitcode(): Așteaptă terminarea proceselor copil și află cum s-au terminat.