← retour aux snippets

subprocess.run: env custom, cwd et capture_output

Exécuter une commande avec environnement et répertoire courants personnalisés.

python cli #subprocess#env#cwd

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.