Exécuter des commandes avec subprocess
Exécuter des programmes externes
Exécuter des commandes avec subprocess est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce que subprocess
Le module subprocess permet à votre programme Python d'exécuter des commandes externes et d'autres programmes, comme si vous les tapiez dans un terminal.
import subprocess
result = subprocess.run(['echo', 'hello'])
print('return code:', result.returncode)Bases de subprocess.run
subprocess.run() est le point d'entrée recommandé. Vous transmettez la commande sous la forme d'une liste d'arguments : le nom du programme en premier, puis chaque argument séparément.
import subprocess
result = subprocess.run(['echo', 'one', 'two'])
print('done with code', result.returncode)Pourquoi une liste plutôt qu'une chaîne
Transmettre une liste évite que l'interpréteur de commandes analyse votre commande, ce qui empêche les erreurs de guillemets et les risques d'injection dans l'interpréteur. Chaque élément constitue un argument.
import subprocess
# Safe: each piece is its own argument
subprocess.run(['echo', 'a file with spaces.txt'])L'objet CompletedProcess
run() renvoie un objet CompletedProcess contenant args, returncode et, si la sortie a été capturée, cette sortie. Le code 0 indique la réussite.
import subprocess
cp = subprocess.run(['true'])
print('args:', cp.args)
print('returncode:', cp.returncode)Vérifier les codes de retour
Un code de retour non nul signifie généralement que la commande a échoué. Vous pouvez l'examiner manuellement après l'appel.
import subprocess
cp = subprocess.run(['ls', '/no/such/path'])
if cp.returncode != 0:
print('command failed with', cp.returncode)Déclencher une erreur en cas d'échec avec check=True
Transmettez check=True pour que run() lève automatiquement CalledProcessError lorsque la commande se termine avec un code non nul.
import subprocess
try:
subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
print('failed with code', e.returncode)Transmettre des arguments
Les arguments supplémentaires de la commande sont simplement d'autres éléments de la liste. Ici, nous listons un répertoire dans un format détaillé.
import subprocess
subprocess.run(['echo', '-n', 'no newline'])
print()
print('above echo had -n flag')Définir un délai d'attente
Utilisez timeout pour interrompre une commande qui s'exécute trop longtemps. Cela lève TimeoutExpired.
import subprocess
try:
subprocess.run(['sleep', '5'], timeout=0.1)
except subprocess.TimeoutExpired:
print('command took too long, aborted')Répertoire de travail
L'argument cwd exécute la commande dans un répertoire précis sans modifier le répertoire de travail de votre propre programme.
import subprocess
subprocess.run(['pwd'], cwd='/tmp')L'option shell=True
Avec shell=True, vous transmettez une seule chaîne de commande interprétée par l'interpréteur. Cela permet d'utiliser les tubes et les motifs génériques, mais c'est risqué avec une entrée non fiable. Préférez la forme avec une liste.
import subprocess
subprocess.run('echo hello && echo world', shell=True)Éviter os.system
L'ancien os.system renvoie uniquement un code de sortie et n'offre ni transmission sûre des arguments ni capture de la sortie. subprocess.run le remplace dans tout nouveau code.
import subprocess
# Modern, safe approach
cp = subprocess.run(['echo', 'modern way'])
print('exit code:', cp.returncode)Vérification rapide
Vérifiez votre compréhension de l'exécution des commandes.
Récapitulatif
Vous avez appris à exécuter des commandes avec subprocess :
subprocess.run([...])exécute un programme externe en toute sécurité.- Il renvoie un
CompletedProcesscontenantreturncode. check=Truelève une exception en cas d'échec ;timeoutinterrompt les commandes lentes.- Préférez la forme avec une liste à
shell=True.
Ensuite : capturer la sortie de la commande.
Questions Fréquemment Posées
La leçon « Exécuter des commandes avec subprocess » est-elle gratuite ?
Oui — le texte complet de « Exécuter des commandes avec subprocess » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Exécuter des commandes avec subprocess » ?
Exécuter des programmes externes Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Python Academy ?
Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Exécuter des commandes avec subprocess » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?
Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Exécuter des commandes avec subprocess
- Capturer la sortie
- Environnement et module os
- shutil pour les opérations sur les fichiers