Невозможно использовать регулярное выражение с pyinotify - PullRequest
1 голос
/ 26 июня 2019

Можно использовать регулярное выражение с командой оболочки inotify, но не с pyinotify. Я мог бы получить список каталогов с помощью регулярного выражения и передать его в add_watch, но папки «Do *» являются динамическими, в том смысле, что они создаются и уничтожаются очень часто, и, следовательно, создают жесткий список и передают его в Функция add_watch будет неточной.

Я попытался скомпилировать регулярное выражение и передать его в add_watch, и оно не работает, возможно, потому, что оно ожидает строку или список строк.

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()

Я хотел бы передать регулярное выражение в функцию add_watch pyinotify без необходимости создания жесткого списка, а затем передать его, так как содержимое каталога будет различаться.

1 Ответ

0 голосов
/ 26 июня 2019

WatchManager.add_watch принимает do_glob опцию , которая позволяет выполнять глобализацию по пути.

Вы передаете юникод str, а не объект регулярного выражения для аргумента path.

dir_glob = '/var/run/shm/Do*/updates/ab*.xml'
wm.add_watch(dir_glob, pyinotify.IN_CLOSE_WRITE, onChange, do_glob=True)
...