Maison  >  Article  >  développement back-end  >  Comment suivre les fichiers journaux en Python : bloquant ou non bloquant ?

Comment suivre les fichiers journaux en Python : bloquant ou non bloquant ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-20 19:54:18968parcourir

How to Tail Log Files in Python: Blocking vs. Non-Blocking?

Fichiers journaux de suivi avec Python

On souhaite souvent suivre un fichier journal ou le regarder passivement pour voir le nouveau contenu qui y est ajouté . Ceci peut être réalisé en Python de plusieurs manières.

Non bloquant

Pour cette approche, on peut utiliser le sous-processus et sélectionner des modules.

import time
import subprocess
import select

f = subprocess.Popen(['tail', '-F', filename],
                      stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p = select.poll()
p.register(f.stdout)

while True:
    if p.poll(1):
        print(f.stdout.readline())
    time.sleep(1)

Ce code ouvre un sous-processus exécutant tail -F sur le fichier spécifié et interroge sa sortie pour de nouvelles données, en les imprimant lorsqu'elles sont disponibles. Cette approche ne bloque pas le programme principal.

Blocage

Une approche de blocage plus simple est disponible en utilisant uniquement le module de sous-processus.

import subprocess

f = subprocess.Popen(['tail', '-F', filename],
                      stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
    line = f.stdout.readline()
    print(line)

Ce code imprime également de nouvelles lignes au fur et à mesure qu'elles sont ajoutées, mais il se bloquera jusqu'à la fermeture du programme tail.

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