Maison >développement back-end >Tutoriel Python >Comment capturer la sortie du sous-processus en direct et l'enregistrer simultanément ?

Comment capturer la sortie du sous-processus en direct et l'enregistrer simultanément ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 10:48:15960parcourir

How to Capture Live Subprocess Output and Log it Simultaneously?

Sortie en direct de la commande de sous-processus

Pour capturer à la fois la sortie en direct et la stocker pour la journalisation, utilisez l'une de ces approches :

Utiliser un itérateur

Créez un itérateur pour lire à partir du sous-traiter la sortie standard et y écrire simultanément :

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)

Utiliser un écrivain et un lecteur

Passer un écrivain au sous-processus et lire à partir d'un lecteur :

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

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