Subprocess

10 min Niveau 9

Utilisation de subprocess en Python

Le module subprocess permet à votre programme Python d'interagir avec d'autres programmes et processus. Il remplace plusieurs anciens modules et fonctions, tels que os.system et le module os.spawn.

Importation de subprocess

import subprocess

Fonctions Principales de subprocess

subprocess.run

Usage

Exécute une commande, attend qu'elle se termine, puis retourne un objet CompletedProcess.

Exemple

result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)

subprocess.Popen

Usage

Permet une interaction plus avancée avec le processus (entrées/sorties).

Exemple

with subprocess.Popen(['grep', 'motif'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True) as proc:
    stdout, _ = proc.communicate('Recherchez ce texte\nune autre ligne')
    print(stdout)

Exécution de Commandes Simples

subprocess.run(['echo', 'Bonjour le monde!'])

Capturer la Sortie d'une Commande

result = subprocess.run(['ls', '-l', '/dossier/inexistant'], capture_output=True, text=True, check=True)
print("Sortie:", result.stdout)
print("Erreur:", result.stderr)

Exécution de Commandes Shell

Avec shell=True

subprocess.run('cat mon_fichier.txt | grep motif', shell=True)

Gestion des Exceptions

subprocess.CalledProcessError : Se produit lorsque la commande exécutée avec check=True se termine par un code de sortie non nul.

Gestion de l'Exception

try:
    subprocess.run(['ls', '-l', '/dossier/inexistant'], check=True)
except subprocess.CalledProcessError as e:
    print('Erreur:', e)

Bonnes Pratiques

Sécurité : Évitez shell=True autant que possible, car cela peut être une faille de sécurité, en particulier si vous exécutez des commandes construites à partir d'entrées utilisateur. Gestion des Ressources : Utilisez le gestionnaire de contexte (with) avec subprocess.Popen pour vous assurer que les ressources sont libérées. Validation des Entrées : Soyez prudent avec les données entrées dans les commandes pour éviter les injections de commandes.

logo discord

Besoin d'aide ?

Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !

En savoir plus