Maison  >  Article  >  développement back-end  >  Comment obtenir une sortie en temps réel des sous-processus en Python ?

Comment obtenir une sortie en temps réel des sous-processus en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 05:49:31772parcourir

How to Get Real-Time Output from Subprocesses in Python?

Sortie en temps réel des sous-processus

En Python, le module de sous-processus fournit un moyen pratique d'exécuter des programmes externes. Cependant, par défaut, il capture toutes les sorties du programme et les renvoie une fois le processus terminé. Cela peut être problématique pour les processus de longue durée.

Présentation de l'interrogation de sortie itérative

Pour résoudre ce problème, vous pouvez exploiter la fonction iter() pour récupérer la sortie ligne par ligne. comme la commande le génère. Voici une version modifiée de votre fonction execute() qui implémente cette approche :

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

Exemple d'utilisation

Vous pouvez maintenant parcourir la sortie du processus au fur et à mesure devient disponible :

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

Cet exemple imprimera en continu le résultat de la commande de localisation lors de la recherche de fichiers.

Intervalle d'interrogation

Bien que cette méthode fournisse une sortie en temps réel, l'intervalle d'interrogation peut avoir un impact sur les performances. Le paramètre universal_newlines garantit que vous obtenez des lignes de texte plutôt que des octets, ce qui entraîne une surcharge supplémentaire. Pour optimiser l'interrogation, vous pouvez réduire la fréquence à laquelle la sortie du processus est vérifiée.

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