Fichiers journaux de queue en Python : une approche moderne
Introduction
Les fichiers journaux de queue sont une tâche courante dans l’administration système. En Python, la possibilité d'accéder à la sortie du fichier journal de manière non bloquante est particulièrement utile pour la surveillance et l'analyse des données en temps réel.
Suivi non bloquant
Pour une queue non bloquante, les modules de sous-processus et de sélection peuvent être combinés. Cette approche utilise un processus enfant pour exécuter la commande tail, tandis que le processus principal interroge la sortie de l'enfant pour de nouvelles données.
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)
Dans cet extrait de code, la commande tail est exécutée de manière non bloquante, permettant au principal processus pour continuer à s’exécuter. Le module de sélection est utilisé pour interroger le canal de sortie à la recherche de nouvelles données, et lorsque les données deviennent disponibles, elles sont imprimées.
Blocage de la queue
Pour bloquer la queue, le sous-processus Le module peut être utilisé sans le module de sélection. Cette approche bloque le processus principal jusqu'à ce que le programme tail se termine ou soit tué.
import subprocess f = subprocess.Popen(['tail', '-F', filename], stdout=subprocess.PIPE, stderr=subprocess.PIPE) while True: line = f.stdout.readline() print(line)
Dans cet extrait de code, la commande tail est exécutée en blocage, empêchant le processus principal de s'exécuter jusqu'à la fin du programme tail.
Conclusion
Ces approches fournissent différentes options pour suivre les fichiers journaux en Python en fonction du comportement souhaité. L'approche non bloquante convient à la surveillance en temps réel, tandis que l'approche bloquante peut être utilisée pour des scénarios plus traditionnels dans lesquels le processus principal attend la fin du programme final.
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!