Maison  >  Article  >  développement back-end  >  Comment sous-traiter simultanément la sortie vers les fichiers et le terminal en Python ?

Comment sous-traiter simultanément la sortie vers les fichiers et le terminal en Python ?

DDD
DDDoriginal
2024-11-03 21:46:31140parcourir

How to Tee Subprocess Output to Files and Terminal Simultaneously in Python?

Transmission simultanée de la sortie du sous-processus vers les fichiers et le terminal

La méthode subprocess.call() de Python vous permet d'exécuter des commandes externes. Cependant, par défaut, la sortie est dirigée vers le terminal. Cet article aborde la question de savoir comment écrire simultanément la sortie dans les fichiers et dans le terminal.

La réponse réside dans l'utilisation directe de la fonction Popen(), qui offre un meilleur contrôle sur le processus d'exécution. En spécifiant stdout=PIPE, vous pouvez lire le flux stdout du processus. Pour obtenir le comportement souhaité, suivez ces étapes :

  1. Créer une fonction Tee : Définissez une fonction qui lit à partir d'un fichier d'entrée et l'écrit dans plusieurs fichiers de sortie. Cette fonction s'exécute dans un thread séparé, garantissant que le processus principal n'est pas bloqué.
  2. Utilisez la fonction Tee dans la fonction Teed_Call : Créez une fonction wrapper nommée teed_call() qui appelle Popen() avec stdout=PIPE et stderr=PIPE. Il utilise la fonction tee() pour écrire les flux stdout et stderr dans les fichiers et le terminal.
  3. Exécuter les commandes avec Teeing : Appelez teed_call() avec les arguments de commande souhaités et spécifiez le fichiers de sortie à l'aide des paramètres stdout et stderr.
  4. Attendez la fin de la sortie : Après avoir exécuté la commande, rejoignez le thread créé par la fonction tee() pour vous assurer que toutes les sorties sont écrites avant de continuer .

L'exemple de code fourni dans la réponse montre comment utiliser la fonction teed_call() pour diffuser les flux stdout et stderr de diverses commandes, notamment cat, echo et gcc.

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