"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je faire taire la sortie du sous-processus en Python ?

Comment puis-je faire taire la sortie du sous-processus en Python ?

Publié le 2025-01-26
Parcourir:221

How Can I Silence Subprocess Output in Python?

Silencer la sortie du sous-processus en Python : un guide complet

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 un mécanisme puissant à cet effet, 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é que la commande exécutée génère 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.

Approche pour Python 3.3 et versions ultérieures

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 la sortie standard et les flux d'erreurs standard du sous-processus sont dirigés vers le périphérique DEVNULL, empêchant ainsi tout message indésirable d'atteindre le terminal.

Approche pour Python 2.7 et versions antérieures

Pour les versions de Python antérieures à 3.3, y compris Python 2.7, largement utilisé, la désactivation de la sortie du sous-processus nécessite une procédure légèrement différente approche. 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 arguments stdout et stderr à subprocess.call(), nous redirigeons efficacement toutes les sorties des sous-processus vers le vide, garantissant ainsi un terminal propre et épuré.

Méthode alternative : redirection de commande Shell

Pour Pour être complet, il convient de mentionner une approche alternative qui consiste à 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 à l'aide de l'opérateur >.

Quelle que soit l'approche que vous choisissez, la méthode courante L'objectif 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3