1

It's possible to use a regex with inotify shell command, but not with pyinotify. I could get the list of directories using the regex and pass it to add_watch, but, the folders "Do*" are dynamic, in the sense that they are created and destroyed very often and hence, creating a rigid list and passing it to the add_watch function would be inaccurate.

I've tried to compile the regex and pass it to add_watch and it doesn't work, probably because it expects a string or list of strings.

import pyinotify,subprocess,re
def onChange(ev):
  subprocess.run("echo 'changed'", shell = True)

wm = pyinotify.WatchManager()
regex_dir = re.compile('/var/run/shm/Do*/updates/ab*.xml')
wm.add_watch(regex_dir, pyinotify.IN_CLOSE_WRITE , onChange)
notifier = pyinotify.Notifier(wm)
notifier.loop()

I would like to pass a regex to add_watch function of pyinotify without having to create a rigid list and then pass that since the directory contents would vary.

KungFuPanda
  • 55
  • 1
  • 6

1 Answers1

1

WatchManager.add_watch accepts a do_glob option that allows to perform globbing on pathname.

You pass a unicode str and not a regex object for the path argument.

dir_glob = '/var/run/shm/Do*/updates/ab*.xml'
wm.add_watch(dir_glob, pyinotify.IN_CLOSE_WRITE, onChange, do_glob=True)
Oluwafemi Sule
  • 36,144
  • 1
  • 56
  • 81