Familia os.spawn*: spawnv(), spawnlp()… în Python

Procese (os) Python 3.0+

Pornește un program nou ca proces separat; variante vechi, înlocuite de subprocess.

Sintaxă
os.spawnv(mod, cale, argumente)
os.spawnlp(mod, program, arg0, ...)
...

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; spawn nu o capturează. Folosește subprocess.run(..., capture_output=True).

Comenzi înrudite