Maison  >  Article  >  développement back-end  >  Comment suivre les fichiers journaux en Python sans blocage ?

Comment suivre les fichiers journaux en Python sans blocage ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 19:58:03141parcourir

How to Tail Log Files in Python Without Blocking?

Fichiers journaux de suivi en Python

Q : Existe-t-il un moyen non bloquant ou verrouillable de suivre un fichier journal en Python, similaire à la queue de commande -F ? Bien qu'il existe une méthode plus ancienne, existe-t-il une meilleure solution ou bibliothèque disponible ?

R : Non bloquant :

Sous Linux, l'utilisation du sous-processus et des modules de sélection offre un solution non bloquante :

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)

Cette solution interroge le canal de sortie à la recherche de nouvelles données et les affiche immédiatement. Vous pouvez remplacer time.sleep(1) et print f.stdout.readline() par des fonctionnalités personnalisées.

Blocage :

Pour une approche de blocage, vous pouvez utiliser le module de sous-processus sans modules supplémentaires :

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

Cette méthode imprimera également les nouvelles lignes au fur et à mesure qu'elles émergent, mais elle arrêtera l'exécution jusqu'à ce que le processus de queue soit terminé (par exemple, via f.kill()).

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