Maison > développement back-end > Tutoriel Python > Comment diffuser la sortie du sous-processus en temps réel à l'aide de « subprocess.communicate() » de Python ?

Comment diffuser la sortie du sous-processus en temps réel à l'aide de « subprocess.communicate() » de Python ?

Patricia Arquette
Libérer: 2025-01-01 00:30:19
original
862 Les gens l'ont consulté

How to Stream Subprocess Output in Real-time using Python's `subprocess.communicate()`?

Streaming de la sortie de subprocess.communicate()

En Python, utiliser subprocess.communicate() pour lire la sortie standard d'un processus qui s'exécute pendant une période prolongée peut être problématique. La sortie résultante est reçue en une seule fois, ce qui gêne l'affichage en temps réel.

Pour surmonter ce problème, il est possible d'imprimer chaque ligne de la sortie standard au fur et à mesure de sa génération tout en garantissant la fin du processus avant de continuer :

Python 2

#!/usr/bin/env python2
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()  # Wait for subprocess termination
Copier après la connexion

Python 3

#!/usr/bin/env python3
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

Cette approche modifiée lit en continu les lignes au fur et à mesure de leur écriture, en contournant le délai du tampon. Le processus conserve toujours son comportement de blocage, interrompant l'exécution jusqu'à la fin.

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 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