Maison > développement back-end > Tutoriel Python > Comment puis-je capturer et afficher simultanément la sortie en direct d'un sous-processus en Python ?

Comment puis-je capturer et afficher simultanément la sortie en direct d'un sous-processus en Python ?

Susan Sarandon
Libérer: 2024-12-03 21:58:15
original
118 Les gens l'ont consulté

How Can I Simultaneously Capture and Display Live Output from a Subprocess in Python?

Imprimer la sortie en direct tout en stockant la sortie de la commande du sous-processus

Lors de l'appel d'un sous-processus à l'aide de subprocess.Popen, nous pouvons simultanément stocker sa sortie à des fins de journalisation et l'afficher en direct sur le terminal.

Solutions possibles

Option 1 : Utiliser Itérateurs

import subprocess
import sys

with open("test.log", "wb") as f:
    process = subprocess.Popen(your_command, stdout=subprocess.PIPE)
    for c in iter(lambda: process.stdout.read(1), b""):
        sys.stdout.buffer.write(c)
        f.buffer.write(c)
Copier après la connexion

Option 2 : Utiliser un lecteur et un écrivain

import io
import time
import subprocess
import sys

filename = "test.log"
with io.open(filename, "wb") as writer, io.open(filename, "rb", 1) as reader:
    process = subprocess.Popen(command, stdout=writer)
    while process.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

Option 3 : Solution personnalisée

ret_val = subprocess.Popen(run_command,
                            stdout=log_file,
                            stderr=subprocess.PIPE,
                            shell=True)
while not ret_val.poll():
    log_file.flush()
Copier après la connexion

Dans un autre terminal, exécutez :

tail -f log.txt
Copier après la connexion

Avec ceux-ci méthodes, vous pouvez capturer la sortie du sous-processus tout en l'affichant en direct, garantissant à la fois la journalisation et le suivi de la progression.

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