Quelque chose comme tail -f en Python

Histoire originale: [tail -f en Python] (http://qiita.com/sakamotomsh/items/f1cc47010a90e1e790fb)

[Comme la queue en Python] (http://blog.liris.org/2010/01/pythontail.html) Je ne pense pas que ce soit si difficile.

Récemment, j'ai vu un article qui watchdog est utile.

J'ai essayé de l'utiliser pour la surveillance des fichiers. Pour le rendre indépendant du système d'exploitation [PollingObserver] Il semble utiliser (http://pythonhosted.org//watchdog/api.html#module-watchdog.observers.polling).

tail-f.py


#!/usr/bin/env python
import os
import sys
import time
from os.path import dirname, exists

from watchdog.events import FileSystemEventHandler
from watchdog.observers.polling import PollingObserver


class TailHandler(FileSystemEventHandler):

    def __init__(self, path):
        self.path = path
        self.file = open(path, 'r')
        self.pos = os.stat(path)[6]

    def close(self):
        self.file.close()

    def print_line(self):
        self.file.seek(self.pos)
        for block in iter(lambda: self.file.read(32), ''):
            print(block, end='')
        self.pos = self.file.tell()

    def on_modified(self, event):
        if event.is_directory or self.path != event.src_path:
            return
        self.print_line()


def tail_like(path):
    observer = PollingObserver()
    handler = TailHandler(path)
    observer.schedule(handler, dirname(path))
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    finally:
        handler.close()
    observer.join()


def main():
    path = sys.argv[1]
    if not exists(path):
        print('{} is not found'.format(path))
        return 
    tail_like(path)


if __name__ == '__main__':
    main()

Dans chaque terminal, procédez comme suit:

$ vm_stat -c 60 0.3 >> logs/vmstat.log
$ python tail-f.py logs/vmstat.log

Recommended Posts

Quelque chose comme tail -f en Python
Quelque chose comme JS setTimeout en python
Faites quelque chose comme les transactions Redis en Python
Je veux faire quelque chose comme sort uniq en Python
Afficher des caractères comme AA en python
Faites quelque chose comme un interpréteur Python avec Visual Studio Code
Quelque chose comme 40-32 / 2 = 4!
Je voulais faire quelque chose comme la pipe d'Elixir en Python
Trouver des fichiers comme Linux Find en Python
# J'ai essayé quelque chose comme Vlookup avec Python # 2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Étape AIC en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Convertir les séquences d'échappement Unicode comme \ u en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python