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!