Mercurial > templog
view web/watch.py @ 523:21ce2b15128f
title
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 29 Jan 2015 22:52:26 +0800 |
parents | d96042bce9d3 |
children |
line wrap: on
line source
#!/usr/bin/env python3.3 import pyinotify import glob import sys import fnmatch import os def GlobWatcher(object): def __init__(self, g, watcher): self.glob = g self.watches = [] self.watcher = watcher def add_glob(watcher, g): d = os.path.dirname(g) file_watches = add_glob_files def main(): touchf = sys.argv[1] watcher = pyinotify.WatchManager() dirpatterns = {} for g in sys.argv[2:]: d = os.path.dirname(g) pattern = os.path.basename(g) dirpatterns.setdefault(d, []).append(pattern) watchpatterns = {} for d, patterns in dirpatterns.items(): w = watcher.add_watch(d, (pyinotify.IN_MODIFY |pyinotify.IN_CREATE |pyinotify.IN_DELETE |pyinotify.IN_MOVED_FROM |pyinotify.IN_MOVED_TO)) wd = w[d] watchpatterns[wd] = patterns def triggered(event): if event.name is None: return patterns = watchpatterns[event.wd] for p in patterns: if fnmatch.fnmatch(event.name, p): print("matched %s %s %s" % (event.name, p, event.maskname)) os.utime(touchf, None) n = pyinotify.Notifier(watcher, triggered) n.loop() if __name__ == '__main__': main()