subprocess.check_output(), check_call() și call() în Python

Procese (subprocess) Python 3.0+ (check_output: 3.1+)

Funcții mai vechi și mai scurte pentru rularea unui program: ieșirea, verificarea sau doar codul.

Sintaxă
subprocess.check_output(argumente, text=False, ...)
subprocess.check_call(argumente, ...)
subprocess.call(argumente, ...)

Ce face subprocess.check_output(), check_call() și call()

check_output() rulează programul și returnează ieșirea lui; dacă programul eșuează, aruncă CalledProcessError. check_call() rulează și aruncă eroare la cod nenul, fără să captureze ieșirea. call() rulează și returnează doar codul de ieșire.

Sunt echivalente cu run(..., capture_output/check=...); documentația recomandă run() pentru cod nou, dar aceste funcții apar des în cod existent.

Parametri

Parametru Descriere
argumente Programul și argumentele, plus opțiunile lui Popen.

Ce returnează

check_output: ieșirea. check_call: 0. call: codul de ieșire.

Exemple

Exemplul 1: Cele trei variante

import subprocess, sys
print(subprocess.check_output(["echo", "versiunea 1.2"], text=True).strip())
print(subprocess.call(["sh", "-c", "exit 4"]))
print(subprocess.check_call(["true"]))
try:
    subprocess.check_output([sys.executable, "-c", "import sys; sys.exit(2)"])
except subprocess.CalledProcessError as e:
    print("Eroare, cod", e.returncode)

Rezultat

versiunea 1.2
4
0
Eroare, cod 2

Greșeli frecvente

  • Folosești check_output fără text=True și compari rezultatul cu un text; primești bytes, deci comparația este falsă.

Comenzi înrudite