objectif
Exécuter une commande avec environnement et répertoire courants personnalisés.
code minimal
import subprocess, os, sys, tempfile, pathlib
with tempfile.TemporaryDirectory() as tmp:
env = dict(os.environ); env["X"] = "ok"
cp = subprocess.run([sys.executable, "-c", "import os; print(os.getenv('X'))"],
capture_output=True, text=True, env=env, cwd=tmp, check=True)
print(cp.stdout.strip() == "ok") # attendu: True
utilisation
import subprocess, sys
cp = subprocess.run([sys.executable, "-c", "print('hi')"], capture_output=True, text=True)
print(cp.stdout.strip() == "hi")
variante(s) utile(s)
import subprocess, sys
r = subprocess.run([sys.executable, "-c", "exit(3)"], capture_output=True)
print(r.returncode == 3)
notes
- capture_output=True équivaut à stdout=PIPE, stderr=PIPE.
- check=True lèvera CalledProcessError sur code non nul.