Dans le domaine de la programmation Python, il est souvent nécessaire d'exécuter des commandes ou des processus externes à partir de scripts Python. Le module de sous-processus fournit à cet effet un mécanisme puissant, permettant aux programmes Python d'interagir avec le système d'exploitation et d'exécuter des commandes de manière contrôlée.
Un défi courant rencontré lors de l'utilisation d'un sous-processus est la possibilité pour la commande exécutée de générer sortie indésirable, qui peut encombrer le terminal ou l'affichage de la sortie et interférer avec la lisibilité de la propre sortie du script. Ceci est particulièrement répandu lors de l'utilisation de commandes qui fournissent des messages de diagnostic ou des mises à jour d'état détaillées.
Si vous utilisez Python version 3.3 ou ultérieure, la désactivation de la sortie du sous-processus devient un problème. tâche simple grâce à l’introduction de la constante DEVNULL. Cette constante représente un objet de type fichier qui supprime toutes les données qui y sont écrites, redirigeant efficacement la sortie vers nulle part.
Pour utiliser DEVNULL et supprimer la sortie du sous-processus, redirigez-y simplement les flux stdout et stderr :
import subprocess retcode = subprocess.call(['echo', 'foo'], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
Cette approche garantit que les flux de sortie standard et d'erreur standard du sous-processus sont dirigés vers le périphérique DEVNULL, empêchant ainsi tout message indésirable d'atteindre le terminal.
Pour les versions de Python antérieures à 3.3, y compris le Python 2.7 largement utilisé, la désactivation de la sortie du sous-processus nécessite une approche légèrement différente. Python 2.7 ne dispose pas de la constante DEVNULL, nous devons donc ouvrir manuellement le fichier /dev/null et y rediriger la sortie.
Voici comment y parvenir dans Python 2.7 :
import os import subprocess FNULL = open(os.devnull, 'w') retcode = subprocess.call(['echo', 'foo'], stdout=FNULL, stderr=subprocess.STDOUT)
En ouvrant le fichier /dev/null (représentant le périphérique nul, qui supprime toutes les données qui y sont écrites) et en le passant comme stdout et stderr arguments à subprocess.call(), nous redirigeons efficacement toutes les sorties des sous-processus vers le vide, garantissant ainsi un terminal propre et épuré.
Pour être complet, il convient de mentionner un approche alternative qui implique de rediriger la sortie à l’aide d’une commande shell. Bien que cette méthode soit moins portable et généralement déconseillée pour une utilisation dans les scripts Python, elle peut être utile dans certains scénarios :
retcode = os.system("echo 'foo' > /dev/null")
Cette approche exécute directement une commande shell, redirigeant la sortie de la commande echo vers / dev/null en utilisant le > opérateur.
Quelle que soit l'approche que vous choisissez, l'objectif commun est de supprimer les sorties inutiles des sous-processus et de maintenir un affichage de sortie propre et lisible. En utilisant ces techniques, vous pouvez masquer efficacement les résultats des sous-processus et garantir que seules les informations souhaitées sont présentées à l'utilisateur.
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!