Detect File Change Without Polling

Question:

I’m trying to use a method within a Python program to detect whether a file on the file system has been modified. I know that I could have something run on an every-5-seconds to check the last modification date off of the system, but I was curious as to whether there’s an easier method for doing this, without needing to require my program to check repeatedly.

Does anyone know of such a method?

Asked By: Thomas Ward

||

Answers:

For linux, there is pyinotify.

From the homepage:

Pyinotify is a Python module for
monitoring filesystems changes.
Pyinotify relies on a Linux Kernel
feature (merged in kernel 2.6.13)
called inotify. inotify is an
event-driven notifier, its
notifications are exported from kernel
space to user space through three
system calls. pyinotify binds these
system calls and provides an
implementation on top of them offering
a generic and abstract way to
manipulate those functionalities.

Thus it is obviously not cross-platform and relies on a new enough kernel version. However, as far as I can see, requiring kernel support would be true about any non-polling mechanism.

Answered By: Aleksi Torhamo

You should also see inotifyx which is very similar to the previously mentioned pyinotify, but is said to have an API which changes less.

Answered By: AJ00200

On windows there is:

watcher, which is a nice python port of the .NET FileSystemWatcher API.

Also there’s (the one I wrote) dirwatch.

Both rely on the windows ReadDirectoryChangesW function. Though for real work, I’d use watcher (proper C extension, good API, python 2 & 3 support).

Mine is mostly an experiment calling the relevant APIs on windows, so it’s only interesting if you want an example of calling these things from python.

Answered By: otherchirps

watchdog

Excellent cross platform library for watching directories.

From the website

Supported Platforms

  • Linux 2.6 (inotify)

  • Mac OS X (FSEvents, kqueue)

  • FreeBSD/BSD (kqueue)

  • Windows (ReadDirectoryChangesW with I/O completion ports; ReadDirectoryChangesW worker threads)

  • OS-independent (polling the disk for directory snapshots and comparing them periodically; slow and not recommended)

I’ve used it on a couple projects and it seems to work wonderfully.

Answered By: nemith
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.