Comment exécuter un programme externe depuis un script Python ?

Plus la version de Python que vous utilisez est récente, plus les possibilités offertes pour exécuter une commande externe sont nombreuses.

Le langage Python fournit des modules permettant d'exécuter des commandes externes. Avant de pouvoir exécuter une commande externe, il faut s'assurer que le système d'exploitation prenne en charge la commande envoyée. Par exemple, pour lister un répertoire, on utilise la commande dir sur un système d'exploitation Windows tandis que c'est la commande ls qui doit être exécutée sur un système d'exploitation Linux. Plus la version de Python que vous utilisez est récente, plus les possibilités offertes pour exécuter une commande externe sont nombreuses.

Si vous développez un script Python pour une version du langage antérieur à la version 2.4, la seule méthode possible est la fonction os.system(). Vous devez manuellement échapper les caractères spéciaux pour que la commande soit bien interprétée.

os.system(ls -l);

La fonction os.popen va faire la même chose mais en retournant un objet de type file que vous pourrez utiliser pour accéder au flux d'entrée et de sortie du processus exécuté.

flux = os.popen(ls -l);

La version 2.4 du langage Python a ajouté le module subprocess. Ce module permet entre autres d'exécuter des commandes de programme externe. La fonction popen() du module permet d'exécuter une commande externe. Elle accepte une liste contenant la commande et les paramètres mais peut aussi accepter une chaîne de caractères, si on lui précise en deuxième argument que l'on exécute l'outil de ligne de commande du système. L'avantage de la liste est que les caractères spéciaux sont automatiquement protégés.

subprocess.call([ls, -l])
subprocess.call(ls -l, shell=True)

La fonction call() fonctionne de la même manière que popen() mais elle attend que la commande ait fini d'être exécutée et renvoie le code de retour.

code_retour = subprocess.call([ls, -l])

La version 3.5 du langage Python a ajouté la fonction run() au module subprocess. Elle fonctionne de la même manière que la fonction call() mais retourne un objet de type CompletedProcess, qui contient plus d'informations.

Python