Maison >développement back-end >Tutoriel Python >Comment puis-je exécuter des commandes Shell et capturer leur sortie en Python ?

Comment puis-je exécuter des commandes Shell et capturer leur sortie en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 20:11:23501parcourir

How Can I Run Shell Commands and Capture Their Output in Python?

Exécuter des commandes Shell et capturer la sortie

La tâche d'exécution de commandes Shell par programme et de capture de leur sortie sous forme de chaîne peut être accomplie à l'aide du module de sous-processus de Python.

Fonction check_output (Python 2.7 et supérieur)

Pour le plus simple approche dans les versions Python officiellement maintenues, utilisez la fonction check_output :

import subprocess

output = subprocess.check_output(['ls', '-l'])
print(output) # Output: b'total 0\n-rw-r--r--  1 memyself  staff  0 Mar 14 11:04 files\n'

fonction run (Python 3.5 et versions ultérieures)

Dans Python 3.5, la fonction run offre une approche plus flexible et moderne :

import subprocess

result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8')) # Output: 'total 0\n-rw-r--r--  1 memyself  staff  0 Mar 14 11:04 files\n'

Popen Constructor (Toutes les versions)

Pour une compatibilité étendue et des fonctionnalités avancées, utilisez le constructeur Popen de bas niveau. Avec communicate, vous pouvez capturer la sortie et transmettre l'entrée :

import subprocess

p = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
output, _ = p.communicate()
print(output) # Output: b'.\n..\nfoo\n'

Notes

Exécution de commande Shell (shell=True Argument)

Par défaut , les fonctions exécutent des programmes uniques. Pour exécuter des commandes shell complexes, définissez shell=True. Cependant, cela soulève des problèmes de sécurité.

Gestion des entrées

Pour transmettre une entrée via stdin, spécifiez l'argument du mot-clé d'entrée dans run ou Popen.

Gestion des erreurs

Pour une gestion appropriée des erreurs, utilisez check_output avec stdout=subprocess.STDOUT ou Popen avec stderr=subprocess.STDOUT. Vous pouvez également vérifier le code de retour du sous-processus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn