Skip to main content

Filesystem events monitoring

Project description

Build Status CirrusCI Status

Python API and shell utilities to monitor file system events.

Works on 3.9+.

Example API Usage

A simple program that uses watchdog to monitor directories specified as command-line arguments and logs events generated:

import time

from watchdog.events import FileSystemEvent, FileSystemEventHandler
from watchdog.observers import Observer


class MyEventHandler(FileSystemEventHandler):
    def on_any_event(self, event: FileSystemEvent) -> None:
        print(event)


event_handler = MyEventHandler()
observer = Observer()
observer.schedule(event_handler, ".", recursive=True)
observer.start()
try:
    while True:
        time.sleep(1)
finally:
    observer.stop()
    observer.join()

Shell Utilities

Watchdog comes with an optional utility script called watchmedo. Please type watchmedo --help at the shell prompt to know more about this tool.

Here is how you can log the current directory recursively for events related only to *.py and *.txt files while ignoring all directory events:

watchmedo log \
    --patterns='*.py;*.txt' \
    --ignore-directories \
    --recursive \
    --verbose \
    .

You can use the shell-command subcommand to execute shell commands in response to events:

watchmedo shell-command \
    --patterns='*.py;*.txt' \
    --recursive \
    --command='echo "${watch_src_path}"' \
    .

Please see the help information for these commands by typing:

watchmedo [command] --help

About watchmedo Tricks

watchmedo can read tricks.yaml files and execute tricks within them in response to file system events. Tricks are actually event handlers that subclass watchdog.tricks.Trick and are written by plugin authors. Trick classes are augmented with a few additional features that regular event handlers don’t need.

An example tricks.yaml file:

tricks:
- watchdog.tricks.LoggerTrick:
    patterns: ["*.py", "*.js"]
- watchmedo_webtricks.GoogleClosureTrick:
    patterns: ['*.js']
    hash_names: true
    mappings_format: json                  # json|yaml|python
    mappings_module: app/javascript_mappings
    suffix: .min.js
    compilation_level: advanced            # simple|advanced
    source_directory: app/static/js/
    destination_directory: app/public/js/
    files:
      index-page:
      - app/static/js/vendor/jquery*.js
      - app/static/js/base.js
      - app/static/js/index-page.js
      about-page:
      - app/static/js/vendor/jquery*.js
      - app/static/js/base.js
      - app/static/js/about-page/**/*.js

The directory containing the tricks.yaml file will be monitored. Each trick class is initialized with its corresponding keys in the tricks.yaml file as arguments and events are fed to an instance of this class as they arrive.

Installation

Install from PyPI using pip:

$ python -m pip install -U watchdog

# or to install the watchmedo utility:
$ python -m pip install -U "watchdog[watchmedo]"

Install from source:

$ python -m pip install -e .

# or to install the watchmedo utility:
$ python -m pip install -e '.[watchmedo]'

Documentation

You can browse the latest release documentation online.

Contribute

Fork the repository on GitHub and send a pull request, or file an issue ticket at the issue tracker. For general help and questions use stackoverflow with tag python-watchdog.

Create and activate your virtual environment, then:

python -m pip install tox
python -m tox [-q] [-e ENV]

If you are making a substantial change, add an entry to the “Unreleased” section of the changelog.

Supported Platforms

  • Linux 2.6 (inotify)

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

Note that when using watchdog with kqueue, you need the number of file descriptors allowed to be opened by programs running on your system to be increased to more than the number of files that you will be monitoring. The easiest way to do that is to edit your ~/.profile file and add a line similar to:

ulimit -n 1024

This is an inherent problem with kqueue because it uses file descriptors to monitor files. That plus the enormous amount of bookkeeping that watchdog needs to do in order to monitor file descriptors just makes this a painful way to monitor files and directories. In essence, kqueue is not a very scalable way to monitor a deeply nested directory of files and directories with a large number of files.

About using watchdog with editors like Vim

Vim does not modify files unless directed to do so. It creates backup files and then swaps them in to replace the files you are editing on the disk. This means that if you use Vim to edit your files, the on-modified events for those files will not be triggered by watchdog. You may need to configure Vim appropriately to disable this feature.

About using watchdog with CIFS

When you want to watch changes in CIFS, you need to explicitly tell watchdog to use PollingObserver, that is, instead of letting watchdog decide an appropriate observer like in the example above, do:

from watchdog.observers.polling import PollingObserver as Observer

Dependencies

  1. Python 3.9 or above.

  2. XCode (only on macOS when installing from sources)

  3. PyYAML (only for watchmedo)

Licensing

Watchdog is licensed under the terms of the Apache License, version 2.0.

  • Copyright 2018-2024 Mickaël Schoentgen & contributors

  • Copyright 2014-2018 Thomas Amland & contributors

  • Copyright 2012-2014 Google, Inc.

  • Copyright 2011-2012 Yesudeep Mangalapilly

Project source code is available at Github. Please report bugs and file enhancement requests at the issue tracker.

Why Watchdog?

Too many people tried to do the same thing and none did what I needed Python to do:

Changelog

5.0.3

2024-09-27 • full history

  • [inotify] Improve cleaning up Inotify threads, and add eventlet test cases (#1070)

  • Thanks to our beloved contributors: @BoboTiG, @ethan-vanderheijden

5.0.2

2024-09-03 • full history

  • Enable OS specific Mypy checks (#1064)

  • [watchmedo] Fix tricks argument type of schedule_tricks() (#1063)

  • Thanks to our beloved contributors: @gnought, @BoboTiG

5.0.1

2024-09-02 • full history

  • [kqueue] Fix TypeError: kqueue.control() only accepts positional parameters (#1062)

  • Thanks to our beloved contributors: @apoirier, @BoboTiG

5.0.0

2024-08-26 • full history

Breaking Changes

  • Drop support for Python 3.8 (#1055)

  • [core] Enforced usage of proper keyword-arguments (#1057)

  • [core] Renamed the BaseObserverSubclassCallable class to ObserverType (#1055)

  • [inotify] Renamed the inotify_event_struct class to InotifyEventStruct (#1055)

  • [inotify] Renamed the UnsupportedLibc exception to UnsupportedLibcError (#1057)

  • [inotify] Removed the InotifyConstants.IN_CLOSE constant (#1046)

  • [watchmedo] Renamed the LogLevelException exception to LogLevelError (#1057)

  • [watchmedo] Renamed the WatchdogShutdown exception to WatchdogShutdownError (#1057)

  • [windows] Renamed the FILE_NOTIFY_INFORMATION class to FileNotifyInformation (#1055)

  • [windows] Removed the unused WATCHDOG_TRAVERSE_MOVED_DIR_DELAY constant (#1057)

Other Changes

  • [core] Enable disallow_untyped_calls Mypy rule (#1055)

  • [core] Enable disallow_untyped_defs Mypy rule (#1060)

  • [core] Improve typing references for events (#1040)

  • [inotify] Add support for IN_CLOSE_NOWRITE events. A FileClosedNoWriteEvent event will be fired, and its on_closed_no_write() dispatcher has been introduced (#1046)

  • Thanks to our beloved contributors: @BoboTiG

4.0.2

2024-08-11 • full history

  • Add support for Python 3.13 (#1052)

  • [core] Run ruff, apply several fixes (#1033)

  • [core] Remove execution rights from events.py

  • [documentation] Update PatternMatchingEventHandler docstrings (#1048)

  • [documentation] Simplify the quickstart example (#1047)

  • [fsevents] Add missing event_filter keyword-argument to FSEventsObserver.schedule() (#1049)

  • [utils] Fix a possible race condition in AutoRestartTrick (#1002)

  • [watchmedo] Remove execution rights from watchmedo.py

  • Thanks to our beloved contributors: @BoboTiG, @nbelakovski, @ivg

4.0.1

2024-05-23 • full history

  • [inotify] Fix missing event_filter for the full emitter (#1032)

  • Thanks to our beloved contributors: @mraspaud, @BoboTiG

4.0.0

2024-02-06 • full history

  • Drop support for Python 3.7.

  • Add support for Python 3.12.

  • [snapshot] Add typing to dirsnapshot (#1012)

  • [snapshot] Added DirectorySnapshotDiff.ContextManager (#1011)

  • [events] FileSystemEvent, and subclasses, are now dataclass``es, and their ``repr() has changed

  • [windows] WinAPINativeEvent is now a dataclass, and its repr() has changed

  • [events] Log FileOpenedEvent, and FileClosedEvent, events in LoggingEventHandler

  • [tests] Improve FileSystemEvent coverage

  • [watchmedo] Log all events in LoggerTrick

  • [windows] The observers.read_directory_changes.WATCHDOG_TRAVERSE_MOVED_DIR_DELAY hack was removed. The constant will be kept to prevent breaking other softwares.

  • Thanks to our beloved contributors: @BoboTiG, @msabramo

3.0.0

2023-03-20 • full history

  • Drop support for Python 3.6.

  • watchdog is now PEP 561 compatible, and tested with mypy

  • Fix missing > in FileSystemEvent.__repr__() (#980)

  • [ci] Lots of improvements

  • [inotify] Return from InotifyEmitter.queue_events() if not launched when thread is inactive (#963)

  • [tests] Stability improvements

  • [utils] Remove handling of threading.Event.isSet spelling (#962)

  • [watchmedo] Fixed tricks YAML generation (#965)

  • Thanks to our beloved contributors: @kurtmckee, @altendky, @agroszer, @BoboTiG

2.3.1

2023-02-28 • full history

  • Run black on the entire source code

  • Bundle the requirements-tests.txt file in the source distribution (#939)

  • [watchmedo] Exclude FileOpenedEvent events from AutoRestartTrick, and ShellCommandTrick, to restore watchdog < 2.3.0 behavior. A better solution should be found in the future. (#949)

  • [watchmedo] Log FileOpenedEvent, and FileClosedEvent, events in LoggerTrick

  • Thanks to our beloved contributors: @BoboTiG

2.3.0

2023-02-23 • full history

  • [inotify] Add support for IN_OPEN events: a FileOpenedEvent event will be fired (#941)

  • [watchmedo] Add optional event debouncing for auto-restart, only restarting once if many events happen in quick succession (--debounce-interval) (#940)

  • [watchmedo] Exit gracefully on KeyboardInterrupt exception (Ctrl+C) (#945)

  • [watchmedo] Add option to not auto-restart the command after it exits (--no-restart-on-command-exit) (#946)

  • Thanks to our beloved contributors: @BoboTiG, @dstaple, @taleinat, @cernekj

2.2.1

2023-01-01 • full history

  • Enable mypy to discover type hints as specified in PEP 561 (#933)

  • [ci] Set the expected Python version when building release files

  • [ci] Update actions versions in use

  • [watchmedo] [regression] Fix usage of missing signal.SIGHUP attribute on non-Unix OSes (#935)

  • Thanks to our beloved contributors: @BoboTiG, @simon04, @piotrpdev

2.2.0

2022-12-05 • full history

  • [build] Wheels are now available for Python 3.11 (#932)

  • [documentation] HTML documentation builds are now tested for errors (#902)

  • [documentation] Fix typos here, and there (#910)

  • [fsevents2] The fsevents2 observer is now deprecated (#909)

  • [tests] The error message returned by musl libc for error code -1 is now allowed (#923)

  • [utils] Remove unnecessary code in dirsnapshot.py (#930)

  • [watchmedo] Handle shutdown events from SIGHUP (#912)

  • Thanks to our beloved contributors: @kurtmckee, @babymastodon, @QuantumEnergyE, @timgates42, @BoboTiG

2.1.9

2022-06-10 • full history

  • [fsevents] Fix flakey test to assert that there are no errors when stopping the emitter.

  • [inotify] Suppress occasional OSError: [Errno 9] Bad file descriptor at shutdown. (#805)

  • [watchmedo] Make auto-restart restart the sub-process if it terminates. (#896)

  • [watchmedo] Avoid zombie sub-processes when running shell-command without --wait. (#405)

  • Thanks to our beloved contributors: @samschott, @taleinat, @altendky, @BoboTiG

2.1.8

2022-05-15 • full history

  • Fix adding failed emitters on observer schedule. (#872)

  • [inotify] Fix hang when unscheduling watch on a path in an unmounted filesystem. (#869)

  • [watchmedo] Fix broken parsing of --kill-after argument for the auto-restart command. (#870)

  • [watchmedo] Fix broken parsing of boolean arguments. (#887)

  • [watchmedo] Fix broken parsing of commands from auto-restart, and shell-command. (#888)

  • [watchmedo] Support setting verbosity level via -q/--quiet and -v/--verbose arguments. (#889)

  • Thanks to our beloved contributors: @taleinat, @kianmeng, @palfrey, @IlayRosenberg, @BoboTiG

2.1.7

2022-03-25 • full history

  • Eliminate timeout in waiting on event queue. (#861)

  • [inotify] Fix not equality implementation for InotifyEvent. (#848)

  • [watchmedo] Fix calling commands from within a Python script. (#879)

  • [watchmedo] PyYAML is loaded only when strictly necessary. Simple usages of watchmedo are possible without the module being installed. (#847)

  • Thanks to our beloved contributors: @sattlerc, @JanzenLiu, @BoboTiG

2.1.6

2021-10-01 • full history

  • [bsd] Fixed returned paths in kqueue.py and restored the overall results of the test suite. (#842)

  • [bsd] Updated FreeBSD CI support .(#841)

  • [watchmedo] Removed the argh dependency in favor of the builtin argparse module. (#836)

  • [watchmedo] Removed unexistant WindowsApiAsyncObserver references and --debug-force-winapi-async arguments.

  • [watchmedo] Improved the help output.

  • Thanks to our beloved contributors: @knobix, @AndreaRe9, @BoboTiG

2.1.5

2021-08-23 • full history

  • Fix regression introduced in 2.1.4 (reverted “Allow overriding or adding custom event handlers to event dispatch map. (#814)”). (#830)

  • Convert regexes of type str to list. (831)

  • Thanks to our beloved contributors: @unique1o1, @BoboTiG

2.1.4

2021-08-19 • full history

  • [watchmedo] Fix usage of os.setsid() and os.killpg() Unix-only functions. (#809)

  • [mac] Fix missing FileModifiedEvent on permission or ownership changes of a file. (#815)

  • [mac] Convert absolute watch path in FSEeventsEmitter with os.path.realpath(). (#822)

  • Fix a possible AttributeError in SkipRepeatsQueue._put(). (#818)

  • Allow overriding or adding custom event handlers to event dispatch map. (#814)

  • Fix tests on big endian platforms. (#828)

  • Thanks to our beloved contributors: @replabrobin, @BoboTiG, @SamSchott, @AndreiB97, @NiklasRosenstein, @ikokollari, @mgorny

2.1.3

2021-06-26 • full history

  • Publish macOS arm64 and universal2 wheels. (#740)

  • Thanks to our beloved contributors: @kainjow, @BoboTiG

2.1.2

2021-05-19 • full history

  • [mac] Fix relative path handling for non-recursive watch. (#797)

  • [windows] On PyPy, events happening right after start() were missed. Add a workaround for that. (#796)

  • Thanks to our beloved contributors: @oprypin, @CCP-Aporia, @BoboTiG

2.1.1

2021-05-10 • full history

  • [mac] Fix callback exceptions when the watcher is deleted but still receiving events (#786)

  • Thanks to our beloved contributors: @rom1win, @BoboTiG, @CCP-Aporia

2.1.0

2021-05-04 • full history

  • [inotify] Simplify libc loading (#776)

  • [mac] Add support for non-recursive watches in FSEventsEmitter (#779)

  • [watchmedo] Add support for --debug-force-* arguments to tricks (#781)

  • Thanks to our beloved contributors: @CCP-Aporia, @aodj, @UnitedMarsupials, @BoboTiG

2.0.3

2021-04-22 • full history

  • [mac] Use logger.debug() instead of logger.info() (#774)

  • Updated documentation links (#777)

  • Thanks to our beloved contributors: @globau, @imba-tjd, @BoboTiG

2.0.2

2021-02-22 • full history

  • [mac] Add missing exception objects (#766)

  • Thanks to our beloved contributors: @CCP-Aporia, @BoboTiG

2.0.1

2021-02-17 • full history

  • [mac] Fix a segmentation fault when dealing with unicode paths (#763)

  • Moved the CI from Travis-CI to GitHub Actions (#764)

  • Thanks to our beloved contributors: @SamSchott, @BoboTiG

2.0.0

2021-02-11 • full history

  • Avoid deprecated PyEval_InitThreads on Python 3.7+ (#746)

  • [inotify] Add support for IN_CLOSE_WRITE events. A FileCloseEvent event will be fired. Note that IN_CLOSE_NOWRITE events are not handled to prevent much noise. (#184, #245, #280, #313, #690)

  • [inotify] Allow to stop the emitter multiple times (#760)

  • [mac] Support coalesced filesystem events (#734)

  • [mac] Drop support for macOS 10.12 and earlier (#750)

  • [mac] Fix an issue when renaming an item changes only the casing (#750)

  • Thanks to our beloved contributors: @bstaletic, @lukassup, @ysard, @SamSchott, @CCP-Aporia, @BoboTiG

1.0.2

2020-12-18 • full history

  • Wheels are published for GNU/Linux, macOS and Windows (#739)

  • [mac] Fix missing event_id attribute in fsevents (#721)

  • [mac] Return byte paths if a byte path was given in fsevents (#726)

  • [mac] Add compatibility with old macOS versions (#733)

  • Uniformize event for deletion of watched dir (#727)

  • Thanks to our beloved contributors: @SamSchott, @CCP-Aporia, @di, @BoboTiG

1.0.1

2020-12-10 • Fix version with good metadatas.

1.0.0

2020-12-10 • full history

  • Versioning is now following the semver

  • Drop support for Python 2.7, 3.4 and 3.5

  • [mac] Regression fixes for native fsevents (#717)

  • [windows] winapi.BUFFER_SIZE now defaults to 64000 (instead of 2048) (#700)

  • [windows] Introduced winapi.PATH_BUFFER_SIZE (defaults to 2048) to keep the old behavior with path-realted functions (#700)

  • Use pathlib from the standard library, instead of pathtools (#556)

  • Allow file paths on Unix that don’t follow the file system encoding (#703)

  • Removed the long-time deprecated events.LoggingFileSystemEventHandler class, use LoggingEventHandler instead

  • Thanks to our beloved contributors: @SamSchott, @bstaletic, @BoboTiG, @CCP-Aporia

0.10.4

2020-11-21 • full history

  • Add logger parameter for the LoggingEventHandler (#676)

  • Replace mutable default arguments with if None implementation (#677)

  • Expand tests to Python 2.7 and 3.5-3.10 for GNU/Linux, macOS and Windows

  • [mac] Performance improvements for the fsevents module (#680)

  • [mac] Prevent compilation of watchdog_fsevents.c on non-macOS machines (#687)

  • [watchmedo] Handle shutdown events from SIGTERM and SIGINT more reliably (#693)

  • Thanks to our beloved contributors: @Sraw, @CCP-Aporia, @BoboTiG, @maybe-sybr

0.10.3

2020-06-25 • full history

  • Ensure ObservedWatch.path is a string (#651)

  • [inotify] Allow to monitor single file (#655)

  • [inotify] Prevent raising an exception when a file in a monitored folder has no permissions (#669, #670)

  • Thanks to our beloved contributors: @brant-ruan, @rec, @andfoy, @BoboTiG

0.10.2

2020-02-08 • full history

  • Fixed the build_ext command on macOS Catalina (#628)

  • Fixed the installation of macOS requirements on non-macOS OSes (#635)

  • Refactored dispatch() method of FileSystemEventHandler, PatternMatchingEventHandler and RegexMatchingEventHandler

  • [bsd] Improved tests support on non Windows/Linux platforms (#633, #639)

  • [bsd] Added FreeBSD CI support (#532)

  • [bsd] Restored full support (#638, #641)

  • Thanks to our beloved contributors: @BoboTiG, @evilham, @danilobellini

0.10.1

2020-01-30 • full history

  • Fixed Python 2.7 to 3.6 installation when the OS locale is set to POSIX (#615)

  • Fixed the build_ext command on macOS (#618, #620)

  • Moved requirements to setup.cfg (#617)

  • [mac] Removed old C code for Python 2.5 in the fsevents C implementation

  • [snapshot] Added EmptyDirectorySnapshot (#613)

  • Thanks to our beloved contributors: @Ajordat, @tehkirill, @BoboTiG

0.10.0

2020-01-26 • full history

Breaking Changes

  • Dropped support for Python 2.6, 3.2 and 3.3

  • Emitters that failed to start are now removed

  • [snapshot] Removed the deprecated walker_callback argument, use stat instead

  • [watchmedo] The utility is no more installed by default but via the extra watchdog[watchmedo]

Other Changes

  • Fixed several Python 3 warnings

  • Identify synthesized events with is_synthetic attribute (#369)

  • Use os.scandir() to improve memory usage (#503)

  • [bsd] Fixed flavors of FreeBSD detection (#529)

  • [bsd] Skip unprocessable socket files (#509)

  • [inotify] Fixed events containing non-ASCII characters (#516)

  • [inotify] Fixed the way OSError are re-raised (#377)

  • [inotify] Fixed wrong source path after renaming a top level folder (#515)

  • [inotify] Removed delay from non-move events (#477)

  • [mac] Fixed a bug when calling FSEventsEmitter.stop() twice (#466)

  • [mac] Support for unscheduling deleted watch (#541)

  • [mac] Fixed missing field initializers and unused parameters in watchdog_fsevents.c

  • [snapshot] Don’t walk directories without read permissions (#408)

  • [snapshot] Fixed a race condition crash when a directory is swapped for a file (#513)

  • [snasphot] Fixed an AttributeError about forgotten path_for_inode attr (#436)

  • [snasphot] Added the ignore_device=False parameter to the ctor (597)

  • [watchmedo] Fixed the path separator used (#478)

  • [watchmedo] Fixed the use of yaml.load() for yaml.safe_load() (#453)

  • [watchmedo] Handle all available signals (#549)

  • [watchmedo] Added the --debug-force-polling argument (#404)

  • [windows] Fixed issues when the observed directory is deleted (#570 and #601)

  • [windows] WindowsApiEmitter made easier to subclass (#344)

  • [windows] Use separate ctypes DLL instances

  • [windows] Generate sub created events only if recursive=True (#454)

  • Thanks to our beloved contributors: @BoboTiG, @LKleinNux, @rrzaripov, @wildmichael, @TauPan, @segevfiner, @petrblahos, @QuantumEnergyE, @jeffwidman, @kapsh, @nickoala, @petrblahos, @julianolf, @tonybaloney, @mbakiev, @pR0Ps, javaguirre, @skurfer, @exarkun, @joshuaskelly, @danilobellini, @Ajordat

0.9.0

2018-08-28 • full history

  • Deleting the observed directory now emits a DirDeletedEvent event

  • [bsd] Improved the platform detection (#378)

  • [inotify] Fixed a crash when the root directory being watched by was deleted (#374)

  • [inotify] Handle systems providing uClibc

  • [linux] Fixed a possible DirDeletedEvent duplication when deleting a directory

  • [mac] Fixed unicode path handling fsevents2.py (#298)

  • [watchmedo] Added the --debug-force-polling argument (#336)

  • [windows] Fixed the FILE_LIST_DIRECTORY constant (#376)

  • Thanks to our beloved contributors: @vulpeszerda, @hpk42, @tamland, @senden9, @gorakhargosh, @nolsto, @mafrosis, @DonyorM, @anthrotype, @danilobellini, @pierregr, @ShinNoNoir, @adrpar, @gforcada, @pR0Ps, @yegorich, @dhke

0.8.3

2015-02-11 • full history

  • Fixed the use of the root logger (#274)

  • [inotify] Refactored libc loading and improved error handling in inotify_c.py

  • [inotify] Fixed a possible unbound local error in inotify_c.py

  • Thanks to our beloved contributors: @mmorearty, @tamland, @tony, @gorakhargosh

0.8.2

2014-10-29 • full history

  • Event emitters are no longer started on schedule if Observer is not already running

  • [mac] Fixed usued arguments to pass clang compilation (#265)

  • [snapshot] Fixed a possible race condition crash on directory deletion (#281)

  • [windows] Fixed an error when watching the same folder again (#270)

  • Thanks to our beloved contributors: @tamland, @apetrone, @Falldog, @theospears

0.8.1

2014-07-28 • full history

  • Fixed anon_inode descriptors leakage (#249)

  • [inotify] Fixed thread stop dead lock (#250)

  • Thanks to our beloved contributors: @Witos, @adiroiban, @tamland

0.8.0

2014-07-02 • full history

  • Fixed argh deprecation warnings (#242)

  • [snapshot] Methods returning internal stats info were replaced by mtime(), inode() and path() methods

  • [snapshot] Deprecated the walker_callback argument

  • [watchmedo] Fixed auto-restart to terminate all children processes (#225)

  • [watchmedo] Added the --no-parallel argument (#227)

  • [windows] Fixed the value of INVALID_HANDLE_VALUE (#123)

  • [windows] Fixed octal usages to work with Python 3 as well (#223)

  • Thanks to our beloved contributors: @tamland, @Ormod, @berdario, @cro, @BernieSumption, @pypingou, @gotcha, @tommorris, @frewsxcv

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

watchdog-5.0.3.tar.gz (129.6 kB view details)

Uploaded Source

Built Distributions

watchdog-5.0.3-py3-none-win_ia64.whl (79.3 kB view details)

Uploaded Python 3 Windows ia64

watchdog-5.0.3-py3-none-win_amd64.whl (79.3 kB view details)

Uploaded Python 3 Windows x86-64

watchdog-5.0.3-py3-none-win32.whl (79.3 kB view details)

Uploaded Python 3 Windows x86

watchdog-5.0.3-py3-none-manylinux2014_x86_64.whl (79.3 kB view details)

Uploaded Python 3

watchdog-5.0.3-py3-none-manylinux2014_s390x.whl (79.3 kB view details)

Uploaded Python 3

watchdog-5.0.3-py3-none-manylinux2014_ppc64le.whl (79.3 kB view details)

Uploaded Python 3

watchdog-5.0.3-py3-none-manylinux2014_ppc64.whl (79.3 kB view details)

Uploaded Python 3

watchdog-5.0.3-py3-none-manylinux2014_i686.whl (79.3 kB view details)

Uploaded Python 3

watchdog-5.0.3-py3-none-manylinux2014_armv7l.whl (79.3 kB view details)

Uploaded Python 3

watchdog-5.0.3-py3-none-manylinux2014_aarch64.whl (79.3 kB view details)

Uploaded Python 3

watchdog-5.0.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl (88.6 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-5.0.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (88.2 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

watchdog-5.0.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl (88.6 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-5.0.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (88.2 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

watchdog-5.0.3-cp313-cp313-macosx_11_0_arm64.whl (89.3 kB view details)

Uploaded CPython 3.13 macOS 11.0+ ARM64

watchdog-5.0.3-cp313-cp313-macosx_10_13_x86_64.whl (88.7 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

watchdog-5.0.3-cp313-cp313-macosx_10_13_universal2.whl (96.7 kB view details)

Uploaded CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp312-cp312-macosx_11_0_arm64.whl (89.3 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

watchdog-5.0.3-cp312-cp312-macosx_10_13_x86_64.whl (88.7 kB view details)

Uploaded CPython 3.12 macOS 10.13+ x86-64

watchdog-5.0.3-cp312-cp312-macosx_10_13_universal2.whl (96.7 kB view details)

Uploaded CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp311-cp311-macosx_11_0_arm64.whl (89.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

watchdog-5.0.3-cp311-cp311-macosx_10_9_x86_64.whl (88.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

watchdog-5.0.3-cp311-cp311-macosx_10_9_universal2.whl (96.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp310-cp310-macosx_11_0_arm64.whl (89.3 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

watchdog-5.0.3-cp310-cp310-macosx_10_9_x86_64.whl (88.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

watchdog-5.0.3-cp310-cp310-macosx_10_9_universal2.whl (96.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-5.0.3-cp39-cp39-macosx_11_0_arm64.whl (89.3 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

watchdog-5.0.3-cp39-cp39-macosx_10_9_x86_64.whl (88.6 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

watchdog-5.0.3-cp39-cp39-macosx_10_9_universal2.whl (96.6 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file watchdog-5.0.3.tar.gz.

File metadata

  • Download URL: watchdog-5.0.3.tar.gz
  • Upload date:
  • Size: 129.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for watchdog-5.0.3.tar.gz
Algorithm Hash digest
SHA256 108f42a7f0345042a854d4d0ad0834b741d421330d5f575b81cb27b883500176
MD5 83499e8a193ba23bb68436fbdc249589
BLAKE2b-256 a248a86139aaeab2db0a2482676f64798d8ac4d2dbb457523f50ab37bf02ce2c

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-win_ia64.whl.

File metadata

  • Download URL: watchdog-5.0.3-py3-none-win_ia64.whl
  • Upload date:
  • Size: 79.3 kB
  • Tags: Python 3, Windows ia64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for watchdog-5.0.3-py3-none-win_ia64.whl
Algorithm Hash digest
SHA256 49f4d36cb315c25ea0d946e018c01bb028048023b9e103d3d3943f58e109dd45
MD5 f78d51a298fedb40beea81b054a1960c
BLAKE2b-256 38b80aa69337651b3005f161f7f494e59188a1d8d94171666900d26d29d10f69

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-win_amd64.whl.

File metadata

  • Download URL: watchdog-5.0.3-py3-none-win_amd64.whl
  • Upload date:
  • Size: 79.3 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for watchdog-5.0.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f00b4cf737f568be9665563347a910f8bdc76f88c2970121c86243c8cfdf90e9
MD5 9143e92954b5d0d9cc3b5b0d6f6a797e
BLAKE2b-256 91b42b5b59358dadfa2c8676322f955b6c22cde4937602f40490e2f7403e548e

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-win32.whl.

File metadata

  • Download URL: watchdog-5.0.3-py3-none-win32.whl
  • Upload date:
  • Size: 79.3 kB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for watchdog-5.0.3-py3-none-win32.whl
Algorithm Hash digest
SHA256 c66f80ee5b602a9c7ab66e3c9f36026590a0902db3aea414d59a2f55188c1f49
MD5 47c3764088a980c604878b8c3b2ae23a
BLAKE2b-256 9769cfb2d17ba8aabc73be2e2d03c8c319b1f32053a02c4b571852983aa24ff2

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f9332243355643d567697c3e3fa07330a1d1abf981611654a1f2bf2175612b7
MD5 a594820140a9d22a73410a370cd25118
BLAKE2b-256 a058edec25190b6403caf4426dd418234f2358a106634b7d6aa4aec6939b104f

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-py3-none-manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 26dd201857d702bdf9d78c273cafcab5871dd29343748524695cecffa44a8d97
MD5 68d8ad2bca1683c4dc66173b2810f6f8
BLAKE2b-256 cba15393ac6d0b095d3a44946b09258e9b5f22cb2fb67bcfa419dd868478826c

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-py3-none-manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 294b7a598974b8e2c6123d19ef15de9abcd282b0fbbdbc4d23dfa812959a9e05
MD5 4ce07fb704567456bf426c9ea09c1ee9
BLAKE2b-256 f6d919b7d02965be2801e2d0f6f4bde23e4ae172620071b65430fa0c2f8441ac

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-manylinux2014_ppc64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-py3-none-manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 9413384f26b5d050b6978e6fcd0c1e7f0539be7a4f1a885061473c5deaa57221
MD5 1e076668175215178833b2e56bd14cd9
BLAKE2b-256 c3f064059fe162ef3274662e67bbdea6c45b3cd53e846d5bd1365fcdc3dc1d15

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-manylinux2014_i686.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-py3-none-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1e9679245e3ea6498494b3028b90c7b25dbb2abe65c7d07423ecfc2d6218ff7c
MD5 a8efec70c04ba4f9325d1435660ac298
BLAKE2b-256 8b2c567c5e042ed667d3544c43d48a65cf853450a2d2a9089d9523a65f195e94

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-py3-none-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 78864cc8f23dbee55be34cc1494632a7ba30263951b5b2e8fc8286b95845f82c
MD5 73fcf6bf5f3c428e3f0f2e710cf8d997
BLAKE2b-256 f691320bc1496cf951a3cf93a7ffd18a581f0792c304be963d943e0e608c2919

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dd021efa85970bd4824acacbb922066159d0f9e546389a4743d56919b6758b91
MD5 be82439697dce6cccb5f80a03cacf817
BLAKE2b-256 60337cb71c9df9a77b6927ee5f48d25e1de5562ce0fa7e0c56dcf2b0472e64a2

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 720ef9d3a4f9ca575a780af283c8fd3a0674b307651c1976714745090da5a9e8
MD5 142015af096b8dadf84b718cca493feb
BLAKE2b-256 47bbd5e0abcfd6d729029a24766682e062526db8b59e9ae0c94aff509e0fd2b9

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 90a67d7857adb1d985aca232cc9905dd5bc4803ed85cfcdcfcf707e52049eda7
MD5 42716d6ce70f005a560da31bc2626de3
BLAKE2b-256 a2d61d1ca81c75d903eca3fdb7061d93845485b58a5ba182d146843b88fc51c2

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 560135542c91eaa74247a2e8430cf83c4342b29e8ad4f520ae14f0c8a19cfb5b
MD5 88212516acccfae3b8bb460eab947b44
BLAKE2b-256 27c5ce5bb0ce5587ce0899693be9fe20041e301fec143aae54066ac616a925b4

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 223160bb359281bb8e31c8f1068bf71a6b16a8ad3d9524ca6f523ac666bb6a1e
MD5 face583f791b2826bed8ff366dbc2743
BLAKE2b-256 8ef60b9daa3398c3e2918fe79666540eedcbdc07614e77b2154cb35928d0c757

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1021223c08ba8d2d38d71ec1704496471ffd7be42cfb26b87cd5059323a389a1
MD5 ab4d2da68030a22f9951212f68592238
BLAKE2b-256 a4713f2e9fe8403386b99d788868955b3a790f7a09721501a7e1eb58f514ffaa

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ae6deb336cba5d71476caa029ceb6e88047fc1dc74b62b7c4012639c0b563906
MD5 c1151c13b40b072149c985a300b9459e
BLAKE2b-256 96a4b24de77cc9ae424c1687c9d4fb15aa560d7d7b28ba559aca72f781d0202b

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 950f531ec6e03696a2414b6308f5c6ff9dab7821a768c9d5788b1314e9a46ca7
MD5 e218bbc7e71ac37daac8150429d898ae
BLAKE2b-256 54c449af4ab00bcfb688e9962eace2edda07a2cf89b9699ea536da48e8585cff

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53a3f10b62c2d569e260f96e8d966463dec1a50fa4f1b22aec69e3f91025060e
MD5 b654d6f16cf169b9e38a146b16f26a09
BLAKE2b-256 8fb35e10ec32f0c429cdb55b1369066d6e83faf9985b3a53a4e37bb5c5e29aa0

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 349c9488e1d85d0a58e8cb14222d2c51cbc801ce11ac3936ab4c3af986536926
MD5 1a6ff9908b593fda013ebc277552dbcd
BLAKE2b-256 e126129ca9cd0f8016672f37000010c2fedc0b86816e894ebdc0af9bb04a6439

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 94d11b07c64f63f49876e0ab8042ae034674c8653bfcdaa8c4b32e71cfff87e8
MD5 617d6adcc79ab6518eb0a81a7502438a
BLAKE2b-256 1c9b8b206a928c188fdeb7b12e1c795199534cd44bdef223b8470129016009dd

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d52db5beb5e476e6853da2e2d24dbbbed6797b449c8bf7ea118a4ee0d2c9040e
MD5 1efcd39f9b26e6073152302d18bb2422
BLAKE2b-256 d53f41b5d77c10f450b79921c17b7d0b416616048867bfe63acaa072a619a0cb

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 91b522adc25614cdeaf91f7897800b82c13b4b8ac68a42ca959f992f6990c490
MD5 e86c17a630f1628d8a9b7c9cf38c3438
BLAKE2b-256 962bb84e35d49e8b0bad77e5d086fc1e2c6c833bbfe74d53144cfe8b26117eff

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f01f4a3565a387080dc49bdd1fefe4ecc77f894991b88ef927edbfa45eb10818
MD5 89315d04bc8fd8fdaf762b66dff59240
BLAKE2b-256 7034946f08602f8b8e6af45bc725e4a8013975a34883ab5570bd0d827a4c9829

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e25adddab85f674acac303cf1f5835951345a56c5f7f582987d266679979c75b
MD5 db0402c787eb950b1bb7e06f61c907bc
BLAKE2b-256 2b72acb22067d1f18161914c9b1087c703d63638131a9fde78090da290663407

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 53adf73dcdc0ef04f7735066b4a57a4cd3e49ef135daae41d77395f0b5b692cb
MD5 1092d0ec9c91a327cc5b0562f3957b7a
BLAKE2b-256 9e4ff643c0a720d16ef7316aea06a79b96e229e59df4e0d83bec5e12713c1f29

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 85527b882f3facda0579bce9d743ff7f10c3e1e0db0a0d0e28170a7d0e5ce2ea
MD5 55d9d395a6c8b42154df2cb99ed60336
BLAKE2b-256 052bdd2081aab6fc9e785c2eee7146d3c6de58e607f4e70049d715cd170cbf77

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8ca4d854adcf480bdfd80f46fdd6fb49f91dd020ae11c89b3a79e19454ec627
MD5 5d1401521d1f20ea992a7de8dd79caa1
BLAKE2b-256 95271eef63ba7015132a971e0304675497783faaf1ccb4f8223b06b9dfd90ba0

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a2e8f3f955d68471fa37b0e3add18500790d129cc7efe89971b8a4cc6fdeb0b2
MD5 6f28ccc1d8bf3f9c7b9ec3a9a7bdda27
BLAKE2b-256 e7c55393fd01610a92bb7b291b742daae8d1b89f8e11bfb2c37361e17e1be1b8

See more details on using hashes here.

File details

Details for the file watchdog-5.0.3-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-5.0.3-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 752fb40efc7cc8d88ebc332b8f4bcbe2b5cc7e881bccfeb8e25054c00c994ee3
MD5 be7cf2f1d1910a2599c225500270f8c1
BLAKE2b-256 5184fc0b390012be6c4884d02bbef28d599afc6eeec4b560820bec98ff156fd1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page