Ce face Familia os.spawn*: spawnv(), spawnlp()...
Funcțiile spawn combină fork și exec. Cu mod=os.P_WAIT așteaptă terminarea și returnează codul de ieșire; cu os.P_NOWAIT returnează imediat PID-ul. Literele l, v, p, e au același sens ca la exec: spawnl, spawnle, spawnlp, spawnlpe, spawnv, spawnve, spawnvp, spawnvpe.
Documentația oficială recomandă modulul subprocess în locul lor.
Parametri
| Parametru | Descriere |
|---|---|
mod |
os.P_WAIT sau os.P_NOWAIT. |
cale / program, argumente |
Programul și argumentele (cu argv[0]). |
Ce returnează
Codul de ieșire (P_WAIT) sau PID-ul (P_NOWAIT).
Exemple
Exemplul 1: Pornire cu așteptare și fără
import os, sys
sys.stdout.flush()
print(os.spawnlp(os.P_WAIT, "sh", "sh", "-c", "exit 4"))
print(os.spawnvp(os.P_WAIT, "true", ["true"]))
print(os.spawnv(os.P_WAIT, "/bin/sh", ["sh", "-c", "exit 1"]))
print(os.spawnl(os.P_WAIT, "/bin/sh", "sh", "-c", "exit 2"))
env = {"X": "7", "PATH": os.environ["PATH"]}
print(os.spawnle(os.P_WAIT, "/bin/sh", "sh", "-c", "exit $X", env))
print(os.spawnve(os.P_WAIT, "/bin/sh", ["sh", "-c", "exit $X"], env))
print(os.spawnlpe(os.P_WAIT, "sh", "sh", "-c", "exit $X", env), os.spawnvpe(os.P_WAIT, "sh", ["sh", "-c", "exit $X"], env))
pid = os.spawnlp(os.P_NOWAIT, "sleep", "sleep", "0.1")
print(os.waitstatus_to_exitcode(os.waitpid(pid, 0)[1]))
Rezultat
4
0
1
2
7
7
7 7
0
Greșeli frecvente
- Folosești
spawnîn cod nou și ai nevoie de ieșirea programului;spawnnu o capturează. Foloseștesubprocess.run(..., capture_output=True).
Comenzi înrudite
subprocess.run(): Pornește un program extern, așteaptă să se termine și îi returnează rezultatul.Familia os.exec*: execv(), execvp(), execl()...: Înlocuiește programul curent cu alt program; codul de după apel nu mai rulează.os.posix_spawn() și os.posix_spawnp(): Pornește un program nou într-un singur pas, mai eficient decât fork urmat de exec.