os.posix_spawn() și os.posix_spawnp() în Python

Procese (os) Python 3.8+ (Unix)

Pornește un program nou într-un singur pas, mai eficient decât fork urmat de exec.

Sintaxă
pid = os.posix_spawn(cale, argumente, env, *, file_actions=(), ...)
pid = os.posix_spawnp(program, argumente, env, ...)

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 are PATH și programele lui externe nu sunt găsite.

Comenzi înrudite