Maison > développement back-end > Tutoriel Python > Comment puis-je faire taire la sortie du sous-processus en Python ?

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

Linda Hamilton
Libérer: 2024-12-28 19:59:12
original
180 Les gens l'ont consulté

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 à 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.

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)
Copier après la connexion

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.

Approche pour Python 2.7 et versions antérieures

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)
Copier après la connexion

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é.

Méthode alternative : redirection de commande Shell

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")
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal