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.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.1.tar.gz (127.4 kB view details)

Uploaded Source

Built Distributions

watchdog-5.0.1-py3-none-win_ia64.whl (78.9 kB view details)

Uploaded Python 3 Windows ia64

watchdog-5.0.1-py3-none-win_amd64.whl (78.9 kB view details)

Uploaded Python 3 Windows x86-64

watchdog-5.0.1-py3-none-win32.whl (78.9 kB view details)

Uploaded Python 3 Windows x86

watchdog-5.0.1-py3-none-manylinux2014_s390x.whl (78.9 kB view details)

Uploaded Python 3

watchdog-5.0.1-py3-none-manylinux2014_ppc64.whl (78.9 kB view details)

Uploaded Python 3

watchdog-5.0.1-py3-none-manylinux2014_i686.whl (78.9 kB view details)

Uploaded Python 3

watchdog-5.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl (88.2 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-5.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (87.7 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

watchdog-5.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl (88.2 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-5.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (87.7 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

watchdog-5.0.1-cp313-cp313-macosx_11_0_arm64.whl (88.8 kB view details)

Uploaded CPython 3.13 macOS 11.0+ ARM64

watchdog-5.0.1-cp313-cp313-macosx_10_13_x86_64.whl (88.2 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

watchdog-5.0.1-cp313-cp313-macosx_10_13_universal2.whl (96.3 kB view details)

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

watchdog-5.0.1-cp312-cp312-macosx_11_0_arm64.whl (88.8 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

watchdog-5.0.1-cp312-cp312-macosx_10_9_x86_64.whl (88.2 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

watchdog-5.0.1-cp312-cp312-macosx_10_9_universal2.whl (96.3 kB view details)

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

watchdog-5.0.1-cp311-cp311-macosx_11_0_arm64.whl (88.8 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

watchdog-5.0.1-cp311-cp311-macosx_10_9_x86_64.whl (88.2 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

watchdog-5.0.1-cp311-cp311-macosx_10_9_universal2.whl (96.2 kB view details)

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

watchdog-5.0.1-cp310-cp310-macosx_11_0_arm64.whl (88.8 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

watchdog-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl (88.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

watchdog-5.0.1-cp310-cp310-macosx_10_9_universal2.whl (96.2 kB view details)

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

watchdog-5.0.1-cp39-cp39-macosx_11_0_arm64.whl (88.8 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

watchdog-5.0.1-cp39-cp39-macosx_10_9_x86_64.whl (88.2 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

watchdog-5.0.1-cp39-cp39-macosx_10_9_universal2.whl (96.2 kB view details)

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

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.1.tar.gz
Algorithm Hash digest
SHA256 f0180e84e6493ef7c82e051334e8c9b00ffd89fa9de5e0613d3c267f6ccf2d38
MD5 fa3b040221f4573f05027e0fb514af36
BLAKE2b-256 f1d125c4b583ec107c9cccacd57ab3bf106441a60c084bf4656cf46876fdbc3f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.1-py3-none-win_ia64.whl
Algorithm Hash digest
SHA256 9b1b32f89f95162f09aea6e15d9384f6e0490152f10d7ed241f8a85cddc50658
MD5 95f9604e7aa4bfc483de089f7105f5f2
BLAKE2b-256 d93ab03ab90acb2cf75b2f9b67dd68bf6b0148c8b33bcc42df89fe6b36cb0999

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 4eaebff2f938f5325788cef26521891b2d8ecc8e7852aa123a9b458815f93875
MD5 fa45f46c8c4ce5c2e3a20e4af960ab39
BLAKE2b-256 271c140f5fbbc46f0e28393e186562658494a5e4dd5020c9db3d0723947a4a4c

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.1-py3-none-win32.whl
Algorithm Hash digest
SHA256 2b8cd627b76194e725ed6f48d9524b1ad93a51a0dc3bd0225c56023716245091
MD5 1f4e825021a35070e2414546f13cc6bb
BLAKE2b-256 309a81d53bac40b51fea38eaea00b5cd5dd58a3146b5337e35ef004a07553981

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c93aa24899cb4e8a51492c7ccc420bea45ced502fe9ef2e83f9ab1107e5a13b5
MD5 66a880306c3bc8c64d31153d26e4ffd5
BLAKE2b-256 5c30daea3fd06b48bc6442a0ae54d66f555e53c068e13e30466d646abbd178f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-py3-none-manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 72dbdffe4aa0c36c59f4a5190bceeb7fdfdf849ab98a562b3a783a64cc6dacdd
MD5 9913dc57b9bd3c465c52b475af2eacc9
BLAKE2b-256 1801c385c92533ea0d5ebd73a4f5addbc0d9134451efe148245b25b9c0069614

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-py3-none-manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 f3006361dba2005552cc8aa49c44d16a10e0a1939bb3286e888a14f722122808
MD5 2736adb3114e297d69e2ec91b466ea25
BLAKE2b-256 ededafb376b1a8d14da204f172f3c79882cbfae7702cb68e48697ca2fae76d1e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-py3-none-manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 59ec6111f3750772badae3403ef17263489ed6f27ac01ec50c0244b2afa258fb
MD5 7e8bfa12b5cdff05f3f4edff8b07261d
BLAKE2b-256 40d71e278bb25e470b495bf3f4c8e50498bf0e024f1e7b7a85535ae1d7ce531d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-py3-none-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 39e828c4270452b966bc9d814911a3c7e24c62d726d2a3245f5841664ff56b5e
MD5 b747cddb14a978446a5ce1c5ead1e9d7
BLAKE2b-256 48ff65b7be2fd21fb27fd0e037192199241f5c74bc63768965a5f6d93ebc4b5e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-py3-none-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 664917cd513538728875a42d5654584b533da88cf06680452c98e73b45466968
MD5 1e267a2c52b42c732cec05dbb3f35016
BLAKE2b-256 6e8c10a7a60f7d616aaa8c21ffca5b75460cbf13e34400fbe758f5bbc537deca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 763c6f82bb65504b47d4aea268462b2fb662676676356e04787f332a11f03eb0
MD5 f626e4bebe5965b979e9bda883376fd6
BLAKE2b-256 3ffb87a19517e4050a9c872edcc9c22d299d63b4ae7ebab8d7fb18c7e3028677

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a791dfc050ed24b82f7f100ae794192594fe863a7e9bdafcdfa5c6e405a981e5
MD5 3557c100e97d1c5759055c6bc2caa73f
BLAKE2b-256 eabb14de4fe46e635e04424b8cd997554536407988b648e9660087e733ab1969

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 a1cd7c919940b15f253db8279a579fb81e4e4e434b39b11a1cb7f54fe3fa46a6
MD5 6f4049801854c3d38411f3967a8edf8f
BLAKE2b-256 c40f54558cfcfd24e54275fd88ed5e888c0d27ba416bb4f11e46e8d350c4856d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b21e6601efe8453514c2fc21aca57fb5413c3d8b157bfe520b05b57b1788a167
MD5 65cf4972f128162f23e7073f48a98383
BLAKE2b-256 a99f5757d586fa32cd5a9be460f0be63f15bb78893eb3d4104dbd1275effdf07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 8ba1472b5fa7c644e49641f70d7ccc567f70b54d776defa5d6f755dc2edc3fbb
MD5 c6d08faf83cc84bfd95966628b6e20ab
BLAKE2b-256 97dd191818430dc8ca4060e3498ea05fec0501ca6926d5828174af62882fc3a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6bb68d9adb9c45f0dc1c2b12f4fb6eab0463a8f9741e371e4ede6769064e0785
MD5 eb072653c6d41848958055951b6c5e4e
BLAKE2b-256 49d17387c929099321f5c9fe5e42fdf1f965791bca2d0ffc5949cc4074b9bf82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f66df2c152edf5a2fe472bb2f8a5d562165bcf6cf9686cee5d75e524c21ca895
MD5 786686dfaf0bb6b5e1b9e1a39da610ff
BLAKE2b-256 3757c0c5332da7f26b9eba2b9e02906027d1d3523e757c027d7c4facb714067a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 70e30116849f4ec52240eb1fad83d27e525eae179bfe1c09b3bf120163d731b6
MD5 4389556a1c25d2935f2d4784380c024d
BLAKE2b-256 10f79b30a8f4d3e6854023e46ea323c891a66eb22e99673672fcb4edbd390039

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2d56425dfa0c1e6f8a510f21d3d54ef7fe50bbc29638943c2cb1394b7b49156
MD5 c96d650e7554ddb75bb6a48fdfaae023
BLAKE2b-256 6beea943cf5f3aea807101ab540108ff45f575d808cfba87f71c25f9bec06557

See more details on using hashes here.

File details

Details for the file watchdog-5.0.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-5.0.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c4ae0b3e95455fa9d959aa3b253c87845ad454ef188a4bf5a69cab287c131216
MD5 7937230025cccf9bd204b67d4022c122
BLAKE2b-256 6370daf3474b00c89c63f1a69cddcaa5aa555c36feba5b26630a261fef774595

See more details on using hashes here.

File details

Details for the file watchdog-5.0.1-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-5.0.1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e321f1561adea30e447130882efe451af519646178d04189d6ba91a8cd7d88a5
MD5 34499d346fc27d6a69c73482231b4b4b
BLAKE2b-256 4b573732135edd8713a59fa0de82cbd2024915683677f3d98648848492790a69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5541a8765c4090decb4dba55d3dceb57724748a717ceaba8dc4f213edb0026e0
MD5 ed86a4889b84f415b3811824d0e7170c
BLAKE2b-256 599388ba4df90a1931a292357a272bb59ec94ad8c83e198734852a4c401b440e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 39f0de161a822402f0f00c68b82349a4d71c9814e749148ca2b083a25606dbf9
MD5 be9e5db5ed69e293f04183eea5de7487
BLAKE2b-256 89d8e8685ba3633672cfe8b9528555dbe04be4b2e4fcf132c85b4aacb99f26f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a03a6ccb846ead406a25a0b702d0a6b88fdfa77becaf907cfcfce7737ebbda1f
MD5 445a482da16013a7c57a742bd8367f80
BLAKE2b-256 c682eb71d3cb32e8245c2ac4e1f2153e56f2f54bd7cf49513d545237a03d9040

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c92812a358eabebe92b12b9290d16dc95c8003654658f6b2676c9a2103a73ceb
MD5 840e248134d449f63170eff045a21627
BLAKE2b-256 10587cd4a474ef66bb4db1dafd3673038aac03c2aaa2d5d9d68a72b991920ff6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1e8ca9b7f5f03d2f0556a43db1e9adf1e5af6adf52e0890f781324514b67a612
MD5 c751f9cc52d7444d195fa75e86e12288
BLAKE2b-256 7f82989a970f54e72ffc177a63a15894559f325f409716a1aa747bbab2568c5f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a6b8c6c82ada78479a0df568d27d69aa07105aba9301ac66d1ae162645f4ba34
MD5 abf46e104339bc7cc766eb1a749f01d3
BLAKE2b-256 404b7a50fb8161d6972e8b969877334630061c9944d0cd3da42a701567507170

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 20a28c8b0b3edf4ea2b27fb3527fc0a348e983f22a4317d316bb561524391932
MD5 82ae5a5f3846bf9b5db29e68002470fd
BLAKE2b-256 61c0b39bdb82fccef134073dc0c33941637c0eddcf204c916b1fef4a37f282ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 753c6a4c1eea9d3b96cd58159b49103e66cb288216a414ab9ad234ccc7642ec2
MD5 f5e9eb5da5b44f5f2107e38cc4070bc4
BLAKE2b-256 e964d3003b386dc5497a1332aedee6b117120260089c1deb50921a6f9023d5d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6fbb4dd5ace074a2969825fde10034b35b31efcb6973defb22eb945b1d3acc37
MD5 fca66b0b09f5227907dc9fe662d7f961
BLAKE2b-256 796b77056906cac75a193963374b33b54857e2ff738393f941e42151c6f6a907

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