← retour aux snippets

subprocess: run avec check, timeout et capture

Exécuter une commande en sécurité (shell=False), avec timeout et sortie capturée.

objectif

Exécuter une commande en sécurité (shell=False), avec timeout et sortie capturée.

code minimal

import subprocess, sys
out = subprocess.run([sys.executable, "-c", "print('ok')"], check=True, capture_output=True, text=True, timeout=2.0)
print(out.stdout.strip() == "ok" and out.returncode == 0)  # attendu: True

utilisation

import subprocess, sys
try:
    subprocess.run([sys.executable, "-c", "import time; time.sleep(0.05)"], timeout=1.0, check=True)
    print(True)
except subprocess.TimeoutExpired:
    print(False)

variante(s) utile(s)

import subprocess, sys, shlex
cmd = [sys.executable, "-c", "print('x')"]  # évitez shell=True si possible
res = subprocess.run(cmd, capture_output=True, text=True)
print("x" in res.stdout)

notes

  • Préférez shell=False et des listes d’arguments pour éviter l’injection.
  • Utilisez check=True pour échouer vite et timeout pour éviter les blocages.