Maison > développement back-end > Tutoriel Python > Comment puis-je diffuser la sortie d'un sous-processus en temps réel à l'aide de Python ?

Comment puis-je diffuser la sortie d'un sous-processus en temps réel à l'aide de Python ?

Barbara Streisand
Libérer: 2024-12-15 05:56:09
original
442 Les gens l'ont consulté

How Can I Stream Subprocess Output in Real-Time Using Python?

Streaming de la sortie de Subprocess.communicate()

Lors de l'utilisation de subprocess.communicate() pour récupérer la sortie d'un processus, l'intégralité du la sortie standard (stdout) peut être renvoyée immédiatement, empêchant la surveillance en temps réel de la sortie. Ce problème survient en raison de la nature bloquante de la fonction communicate().

Pour résoudre ce problème, on peut adopter une approche de streaming pour imprimer chaque ligne de la sortie standard dès qu'elle devient disponible. Ceci peut être réalisé en employant des itérateurs et en manipulant le paramètre bufsize de Popen().

Dans Python 2 :

from subprocess import Popen, PIPE

p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print(line)
p.wait()
Copier après la connexion

Dans Python 3, le code devient :

from subprocess import Popen, PIPE

with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
    for line in p.stdout:
        print(line, end='')
Copier après la connexion

Le paramètre bufsize=1 force le processus à vider son tampon de sortie après chaque ligne, garantissant que chaque ligne est imprimée immédiatement. iter() permet de lire les lignes de manière asynchrone, ce qui permet de diffuser la sortie. La fin du processus est gérée avec la méthode wait().

En utilisant cette approche de streaming, vous pouvez surveiller la sortie d'un processus de longue durée en temps réel sans compromettre la nature synchrone de la fonction communicate().

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal