Ce face os.system() și os.popen()
system(comanda) rulează comanda în shell, iar ieșirea ei apare direct în terminal. Returnează starea de terminare (pe Unix, codificată ca la wait(); folosește os.waitstatus_to_exitcode() pentru codul de ieșire). popen(comanda) returnează un fișier din care citești ieșirea comenzii.
Ambele trec comanda printr-un shell, deci un text venit de la utilizator poate injecta comenzi. Pentru cod nou, folosește subprocess.run([...]), cu argumentele ca listă.
Parametri
| Parametru | Descriere |
|---|---|
comanda |
Comanda shell, ca text. |
Ce returnează
system: starea de terminare. popen: un obiect fișier.
Exemple
Exemplul 1: Comenzi simple
import os, sys
sys.stdout.flush()
stare = os.system("echo salut din shell")
print("cod de ieșire:", os.waitstatus_to_exitcode(stare))
with os.popen("echo unu; echo doi") as rezultat:
print(rezultat.read().split())
print(os.waitstatus_to_exitcode(os.system("exit 3")))
Rezultat
salut din shell
cod de ieșire: 0
['unu', 'doi']
3
Greșeli frecvente
- Construiești comanda cu date de la utilizator:
os.system("rm " + nume). Un nume cax; rm -rf ~rulează și a doua comandă. Foloseștesubprocess.run(["rm", nume]).
Comenzi înrudite
subprocess.run(): Pornește un program extern, așteaptă să se termine și îi returnează rezultatul.os.wait(), waitpid(), wait3(), wait4(), waitid() și waitstatus_to_exitcode(): Așteaptă terminarea proceselor copil și află cum s-au terminat.shutil.which(): Găsește calea completă a unui program din PATH, ca comanda which din terminal.