os.system() și os.popen() în Python

Rulează o comandă în shell; variantele vechi, înlocuite de modulul subprocess.

Sintaxă
os.system(comanda)
os.popen(comanda, mode='r')

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 ca x; rm -rf ~ rulează și a doua comandă. Folosește subprocess.run(["rm", nume]).

Comenzi înrudite