"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 diffuser la sortie du processus en temps réel en Python ?

Comment diffuser la sortie du processus en temps réel en Python ?

Publié le 2024-11-17
Parcourir:554

How to Stream Process Output in Real-Time in Python?

Affichage continu de la sortie pendant l'exécution du processus

Dans les scripts Python, nous utilisons souvent des sous-processus pour exécuter des programmes externes. Bien qu’il s’agisse d’une fonctionnalité puissante, il peut être frustrant d’attendre la fin d’un processus avant de récupérer son résultat. Pour résoudre ce problème, explorons une méthode permettant de diffuser en continu le résultat du processus pendant son exécution.

Traditionnellement, nous utilisons subprocess.communicate() pour capturer l'intégralité du résultat d'un processus une fois qu'il est terminé. Cependant, cette approche nécessite que le processus soit entièrement terminé avant qu'une sortie puisse être affichée.

Pour activer une sortie continue, nous pouvons exploiter la fonction iter en conjonction avec fd.readline(). Cela nous permet de parcourir le flux stdout du processus, en capturant les lignes dès qu'elles deviennent disponibles :

import subprocess

def execute(cmd):
    popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
    for stdout_line in iter(popen.stdout.readline, ""):
        yield stdout_line 
    popen.stdout.close()
    return_code = popen.wait()
    if return_code:
        raise subprocess.CalledProcessError(return_code, cmd)

Dans cette version améliorée, nous renvoyons chaque ligne de sortie standard dès qu'elle devient disponible. Cela permet au script d'afficher la sortie en continu au fur et à mesure qu'elle est générée par le processus.

Voici un exemple illustratif :

for path in execute(["locate", "a"]):
    print(path, end="")

En utilisant cette approche, nous pouvons afficher en continu les chemins correspondant à la requête de recherche "a" au fur et à mesure qu'ils sont trouvés par la commande "locate", fournissant ainsi un retour en temps réel sur la progression du processus.

Cette technique permet un suivi continu des résultats, améliorant ainsi l'interactivité et l'expérience utilisateur des scripts qui lancent des processus externes.

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