Maison >développement back-end >Tutoriel Python >Comment afficher la sortie du programme en temps réel avec le « sous-processus » de Python ?

Comment afficher la sortie du programme en temps réel avec le « sous-processus » de Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-15 09:55:02942parcourir

How to Display Real-time Program Output with Python's `subprocess`?

Accès à la sortie du programme en temps réel avec un sous-processus

Question :

Comment pouvons-nous obtenir sortie de programme en temps réel à l'aide d'un sous-processus en Python ? Plus précisément, comment pouvons-nous afficher la progression d'un programme en ligne de commande sans mettre la sortie en mémoire tampon ?

Réponse :

Pour obtenir la sortie en temps réel d'un programme exécuté avec sous-processus, nous pouvons utiliser ce qui suit technique :

import subprocess

p = subprocess.Popen('svnadmin verify /var/svn/repos/config',
                     stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True,
                     bufsize=0)  # Set bufsize to 0 for no buffering

while True:
    line = p.stdout.readline()
    if not line:
        break
    print(line.replace('\n', ''))

Explication :

  • Nous définissons bufsize sur 0 dans Popen pour désactiver la mise en mémoire tampon de sortie.
  • Dans la boucle while , nous lisons continuellement les lignes de p.stdout en utilisant readline().
  • Si aucune ligne n'est disponible, la boucle est interrompue et le programme se termine.
  • Nous pouvons traiter ou afficher chaque ligne au fur et à mesure de leur réception, fournissant une sortie en temps réel.

Remarque :

  • Cette méthode peut ne pas fonctionner sur tous les systèmes ou avec tous les programmes.
  • Pour Python 3.8 et versions ultérieures, envisagez d'utiliser asyncio au lieu de descripteurs de fichiers bruts pour gérer la sortie des 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