Maison > développement back-end > Tutoriel Python > Comment puis-je obtenir une sortie en direct d'une commande de sous-processus en Python ?

Comment puis-je obtenir une sortie en direct d'une commande de sous-processus en Python ?

DDD
Libérer: 2024-12-03 08:52:09
original
362 Les gens l'ont consulté

How Can I Get Live Output from a Subprocess Command in Python?

Sortie en direct d'une commande de sous-processus

En Python, vous pouvez capturer la sortie d'une commande de sous-processus et produire simultanément une sortie de diffusion en direct à l'aide les approches suivantes :

Utiliser un Itérateur

import subprocess
import sys

p = subprocess.Popen(['command'], stdout=subprocess.PIPE)
for line in iter(lambda: p.stdout.readline(1), ''):
    sys.stdout.buffer.write(line)
Copier après la connexion

Utilisation d'un FileWriter et d'un FileReader

import io
import time
import subprocess
import sys

log = 'test.log'
with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader:
    p = subprocess.Popen(['command'], stdout=writer)
    while p.poll() is None:
        sys.stdout.write(reader.read())
        time.sleep(0.5)
    # Read the remaining
    sys.stdout.write(reader.read())
Copier après la connexion

Refactoring du code original

Dans votre code original, vous pouvez capturer la sortie en direct après avoir créé un sous-processus comme suit :

ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )
while not ret_val.poll():
    log_file.flush()
    for line in iter(lambda: ret_val.stdout.readline(1), ''):
        if line:
            print(line)
            log_file.write(line.decode())
Copier après la connexion

Cette méthode vous permet de capturer à la fois les flux stdout et stderr et d'imprimer la sortie en direct tout en l'écrivant simultanément dans un fichier journal.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal