An inotify project is now available on PyPI. More documentation is available at the project homepage: PyInotify
Though the inotify functionality is uncomplicated to implement in C, it’s stupidly simple to implement in Python using this library.
To install:
$ sudo pip install inotify
This is the principal logic of the example provided in the project documentation:
i = inotify.adapters.Inotify() i.add_watch('/tmp') for event in i.event_gen(): if event is not None: (header, type_names, watch_path, filename) = event _LOGGER.info("WD=(%d) MASK=(%d) COOKIE=(%d) LEN=(%d) MASK->NAMES=%s " "WATCH-PATH=[%s] FILENAME=[%s]", header.wd, header.mask, header.cookie, header.len, type_names, watch_path, filename)
We ran the following operations on /tmp:
$ touch /tmp/aa $ rm /tmp/aa $ mkdir /tmp/dir1 $ rmdir /tmp/dir1
This was the corresponding output of the inotify process:
2015-04-24 05:02:06,667 - __main__ - INFO - WD=(1) MASK=(256) COOKIE=(0) LEN=(16) MASK->NAMES=['IN_CREATE'] FILENAME=[aa] 2015-04-24 05:02:06,667 - __main__ - INFO - WD=(1) MASK=(32) COOKIE=(0) LEN=(16) MASK->NAMES=['IN_OPEN'] FILENAME=[aa] 2015-04-24 05:02:06,667 - __main__ - INFO - WD=(1) MASK=(4) COOKIE=(0) LEN=(16) MASK->NAMES=['IN_ATTRIB'] FILENAME=[aa] 2015-04-24 05:02:06,667 - __main__ - INFO - WD=(1) MASK=(8) COOKIE=(0) LEN=(16) MASK->NAMES=['IN_CLOSE_WRITE'] FILENAME=[aa] 2015-04-24 05:02:17,412 - __main__ - INFO - WD=(1) MASK=(512) COOKIE=(0) LEN=(16) MASK->NAMES=['IN_DELETE'] FILENAME=[aa] 2015-04-24 05:02:22,884 - __main__ - INFO - WD=(1) MASK=(1073742080) COOKIE=(0) LEN=(16) MASK->NAMES=['IN_ISDIR', 'IN_CREATE'] FILENAME=[dir1] 2015-04-24 05:02:25,948 - __main__ - INFO - WD=(1) MASK=(1073742336) COOKIE=(0) LEN=(16) MASK->NAMES=['IN_ISDIR', 'IN_DELETE'] FILENAME=[dir1]
Lastly, this library also provides the ability to recursively watch a given directory. Just use the inotify.adapters.InotifyTree
class instead of inotify.adapters.Inotify
, and pass a path.