Maison  >  Article  >  développement back-end  >  Comment diffuser la sortie du processus en temps réel en Python ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 04:15:29558parcourir

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 :

<code class="python">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)</code>

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

Voici un exemple illustratif :

<code class="python">for path in execute(["locate", "a"]):
    print(path, end="")</code>

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

Cette technique permet un suivi continu des sorties, améliorant l'interactivité et l'expérience utilisateur des scripts qui lancer des processus externes.

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