-
Notifications
You must be signed in to change notification settings - Fork 0
/
simplefilemon.py
46 lines (39 loc) · 1.17 KB
/
simplefilemon.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import os, traceback
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class FileMonitor(FileSystemEventHandler):
"""
Monitors a given filename, and on change
parses it using the format (a list of what each line means)
"""
@staticmethod
def start(filename,format,callback=None,verbose=False):
observer = Observer()
fm = FileMonitor(observer,filename,format,callback,verbose)
fm._handle()
observer.schedule(fm, path=os.path.dirname(filename), recursive=False)
observer.start()
return fm
def __init__(self,observer,filename,format,callback,verbose):
self._observer = observer
self._format = format
self._callback = callback
self._filename = filename
self._verbose = verbose
def stop(self):
self._observer.stop()
def setCallback(self,callback):
self._callback = callback
def _handle(self):
try:
data = open(self._filename).read().splitlines()
self._callback(zip(self._format,data))
if self._verbose:
print("FM: Got modify: %s" % (self._filename,))
except:
if self._verbose:
traceback.print_exc()
pass
def on_modified(self,event):
if event.src_path == self._filename:
self._handle()