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.0 (dev)

2024-xx-xx • 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.0.tar.gz (127.2 kB view details)

Uploaded Source

Built Distributions

watchdog-5.0.0-py3-none-win_ia64.whl (78.8 kB view details)

Uploaded Python 3 Windows ia64

watchdog-5.0.0-py3-none-win_amd64.whl (78.8 kB view details)

Uploaded Python 3 Windows x86-64

watchdog-5.0.0-py3-none-win32.whl (78.8 kB view details)

Uploaded Python 3 Windows x86

watchdog-5.0.0-py3-none-manylinux2014_x86_64.whl (78.8 kB view details)

Uploaded Python 3

watchdog-5.0.0-py3-none-manylinux2014_s390x.whl (78.8 kB view details)

Uploaded Python 3

watchdog-5.0.0-py3-none-manylinux2014_ppc64le.whl (78.8 kB view details)

Uploaded Python 3

watchdog-5.0.0-py3-none-manylinux2014_ppc64.whl (78.8 kB view details)

Uploaded Python 3

watchdog-5.0.0-py3-none-manylinux2014_i686.whl (78.8 kB view details)

Uploaded Python 3

watchdog-5.0.0-py3-none-manylinux2014_armv7l.whl (78.8 kB view details)

Uploaded Python 3

watchdog-5.0.0-py3-none-manylinux2014_aarch64.whl (78.8 kB view details)

Uploaded Python 3

watchdog-5.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (88.1 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-5.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (87.6 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

watchdog-5.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (88.1 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-5.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (87.6 kB view details)

Uploaded PyPy macOS 10.15+ x86-64

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

Uploaded CPython 3.13 macOS 11.0+ ARM64

watchdog-5.0.0-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.0-cp313-cp313-macosx_10_13_universal2.whl (96.2 kB view details)

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

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

Uploaded CPython 3.12 macOS 11.0+ ARM64

watchdog-5.0.0-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.0-cp312-cp312-macosx_10_9_universal2.whl (96.2 kB view details)

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

watchdog-5.0.0-cp311-cp311-macosx_11_0_arm64.whl (88.7 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

watchdog-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl (88.1 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

watchdog-5.0.0-cp311-cp311-macosx_10_9_universal2.whl (96.1 kB view details)

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

watchdog-5.0.0-cp310-cp310-macosx_11_0_arm64.whl (88.7 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

watchdog-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl (88.1 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

watchdog-5.0.0-cp310-cp310-macosx_10_9_universal2.whl (96.1 kB view details)

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

watchdog-5.0.0-cp39-cp39-macosx_11_0_arm64.whl (88.7 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

watchdog-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl (88.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

watchdog-5.0.0-cp39-cp39-macosx_10_9_universal2.whl (96.1 kB view details)

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

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.0.tar.gz
Algorithm Hash digest
SHA256 990aedb9e2f336b45a70aed9c014450e7c4a70fd99c5f5b1834d57e1453a177e
MD5 b3d79771194799997ac76946656ad67a
BLAKE2b-256 f2b59943b585553bbda2a2795fb0db1d26267e8728f64cb15205dc640a5ecde0

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.0-py3-none-win_ia64.whl
Algorithm Hash digest
SHA256 1d17ec7e022c34fa7ddc72aa41bf28c9d1207ffb193df18ba4f6fde453725b3c
MD5 9bc203e2d1dfaab6a1261cad4c65f1c6
BLAKE2b-256 80054128ae5cdf270bdd80ece30d02c72c0a67433e04c44a3a62e91dce7cfaf6

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 3c2d50fdb86aa6df3973313272f5a17eb26eab29ff5a0bf54b6d34597b4dc4e4
MD5 383721cf4b32faf5c045843f0c6c1df0
BLAKE2b-256 bd941344f73df316dd199b50258d2afad05e1843ff87a2dde969640b3bf6c795

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-5.0.0-py3-none-win32.whl
Algorithm Hash digest
SHA256 d1acef802916083f2ad7988efc7decf07e46e266916c0a09d8fb9d387288ea12
MD5 55cf2f805e6027af399dbb1aa1e12144
BLAKE2b-256 dd808e4360dcd907e7fb0c718811abecbf11ecf75f2fe92c77a6cfc6ff63158c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 78db0fe0336958fc0e1269545c980b6f33d04d184ba191b2800a8b71d3e971a9
MD5 3242277e69e31cfae8fde87943f2d241
BLAKE2b-256 7076062a1e150a2ecbeee87bc1c794e95889eb7122c847666cb3351201386105

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-py3-none-manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 2aa59fab7ff75281778c649557275ca3085eccbdf825a0e2a5ca3810e977afe5
MD5 f37e22241928e1f8d4917fb64e1d828f
BLAKE2b-256 d78651fd182579692c41c1813d9269d349843adeb700adaf6a18d9da0681bcfb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-py3-none-manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 0120b2fa65732797ffa65fa8ee5540c288aa861d91447df298626d6385a24658
MD5 cdf9fa5c7f5309e2e2b58dc8d27e29e3
BLAKE2b-256 7ba9a0ae3c4e8581741a58a6652bebee255328b786d993db38b8d66660b2b830

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-py3-none-manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 22fcad6168fc43cf0e709bd854be5b8edbb0b260f0a6f28f1ea9baa53c6907f7
MD5 7366578cff159d88b48a20153788f25c
BLAKE2b-256 36c07dec9f91e684851a5f14edec1bebfe9bed6e6b45bad21396456543c4ba7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-py3-none-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 16c1aa3377bb1f82c5e24277fcbf4e2cac3c4ce46aaaf7212d53caa9076eb7b7
MD5 c67c98ec93308c755167cd8c20d90ede
BLAKE2b-256 4c28474243e7b4794c1a3fb7eb8c8b15f486ffdfbc9711055540522a09476975

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-py3-none-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 ff4e957c45c446de34c513eadce01d0b65da7eee47c01dce472dd136124552c9
MD5 639740c6773142ecc0a665c197681f3a
BLAKE2b-256 4425238a16222369595f144a58d9d5ea3de2f76a0b4c8f4bab80e806174f6a0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d76efab5248aafbf8a2c2a63cd7b9545e6b346ad1397af8b862a3bb3140787d8
MD5 8c77bef2cc00756c928b856b2e92b414
BLAKE2b-256 488a1e1e36a02a25d0242d0c57fbabcee2296532fe7d0d4e84f7b02fade7872b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e6b0e9b8a9dc3865d65888b5f5222da4ba9c4e09eab13cff5e305e7b7e7248f
MD5 4c826ce8a6c86c32048c24959c4c9adb
BLAKE2b-256 42789d0b5df46d54e5c43a8859edb1b2af9410a08d691150181431e52d46c07a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 bc16d448a74a929b896ed9578c25756b2125400b19b3258be8d9a681c7ae8e71
MD5 44bc1521ac8216fb565ecc1702631716
BLAKE2b-256 d517fc54320492875082d7beee4e332112d83e6b5e6ae849fec82314f13f0ecd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0710e9502727f688a7e06d48078545c54485b3d6eb53b171810879d8223c362a
MD5 f6bd4cb03ff055b78db539baad886040
BLAKE2b-256 f989c78c94ad4325aed59e8f2703efcbc3f54c6674cbd618f05d2bd113d34050

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 4fe6780915000743074236b21b6c37419aea71112af62237881bc265589fe463
MD5 654ff80460081bc228be57eb17cb12f2
BLAKE2b-256 ebd3f86be315e6f995fba06fbb8aac7bebcbed160cb67e1ea65eafa62edd50c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 109daafc5b0f2a98d1fa9475ff9737eb3559d57b18129a36495e20c71de0b44f
MD5 466911b7b3b1581e38516851fdfd9624
BLAKE2b-256 769825eb610688e465514846eb7fd051b48aac648ec345ad6bd6460a1b0d884a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 685931412978d00a91a193d9018fc9e394e565e8e7a0c275512a80e59c6e85f8
MD5 f8df964241dafbf87f188723c1f154e1
BLAKE2b-256 fcc58356ef0f6b991087aaa0abd303f7f8325bab448a7b3a9cd4a1963a18f124

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 663b096368ed7831ac42259919fdb9e0a1f0a8994d972675dfbcca0225e74de1
MD5 1574e37f582ed41054dfa93316d3d427
BLAKE2b-256 9606eadb771e73854c2a1fdbd795aefdb6dcdf0aa9e922f98a7e8e72f4f79469

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6c96b1706430839872a3e33b9370ee3f7a0079f6b828129d88498ad1f96a0f45
MD5 3427426d86c36c30076c5b58f59275a4
BLAKE2b-256 8b2392382a9cbd3d9fbc35fa3693eb2932d54d8085af0a10a0af8c1959681c98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d146331e6b206baa9f6dd40f72b5783ad2302c240df68e7fce196d30588ccf7b
MD5 9b77c01e1279f82bbb334f7275c216e6
BLAKE2b-256 1d54c7bff808050273fc7d1fbe2fa649931c90e558816187d6c28086bd31c5ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 1e26f570dd7f5178656affb24d6f0e22ce66c8daf88d4061a27bfb9ac866b40d
MD5 cc95a284161bd4b2d94ebf0e02ebe4ae
BLAKE2b-256 b7a678a205c13e72c3262dc6b5c7deab86a77b2a24dc4e376cd686d383883b7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0834c21efa3e767849b09e667274604c7cdfe30b49eb95d794565c53f4db3c1e
MD5 4a3752d2ab338ecac8688732279946d7
BLAKE2b-256 f3fd0f1b0c75db0057475956a68e6896808bfaa6a494e02b88c786da9a86a461

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 01ab36cddc836a0f202c66267daaef92ba5c17c7d6436deff0587bb61234c5c9
MD5 7bc7dcd01363c174f66cf3d970619bd0
BLAKE2b-256 7594f43c15bf03de8ce9f29cb82422c0f35f05a4770afbc7f36ca9d55e8d7023

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 3c177085c3d210d1c73cb4569442bdaef706ebebc423bd7aed9e90fc12b2e553
MD5 59bbdfcfa6850b26b387cce9b3a59e7d
BLAKE2b-256 a79e116fe5428214ba8e1139a083e819e8b1231d73d7b600aba9cc7df5338eaa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1228cb097e855d1798b550be8f0e9f0cfbac4384f9a3e91f66d250d03e11294e
MD5 7c5590ba23e543385257c599b657a9e9
BLAKE2b-256 408058a2a3fa64048279f250ea1058482da01c5611f90f82ea8f9f8e2295cfee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cb59ad83a1700304fc1ac7bc53ae9e5cbe9d60a52ed9bba8e2e2d782a201bb2b
MD5 9f049c5b2d0f112a4f21f43b4c7a0ced
BLAKE2b-256 b3f3c8daf10cf15d83cb0f35ac2494a95ed419eeceb08fcdffca2681bd720420

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bf3216ec994eabb2212df9861f19056ca0d4cd3516d56cb95801933876519bfe
MD5 486420d383f5061e828b18c0be8b1a19
BLAKE2b-256 0dc29addcac649bc57d1b4d5af0d67109b1d41728f06e2d8ed207cda0f2f4ef2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8d747bf6d8fe5ce89cb1a36c3724d1599bd4cde3f90fcba518e6260c7058a52
MD5 8e9a9fe56b99dec2762dc5c2e4118f0d
BLAKE2b-256 3f7e17e604211f675b541d658fb882e6b2b9dd3b19c8279ac88ae1a3731225ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6e58eafe9cc5ceebe1562cdb89bacdcd0ef470896e8b0139fe677a5abec243da
MD5 295a928bd38fbeb6652d0abc21ae5a33
BLAKE2b-256 93d8d8d910cca1183c22def842438ab0515fdc8cedea28226d337681c4c4c906

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-5.0.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c2b4d90962639ae7cee371ea3a8da506831945d4418eee090c53bc38e6648dc6
MD5 405ce9a53cdc3a3b8548a1ca4800bcd6
BLAKE2b-256 8cf1a32759b59c43e7dcef4f402afe3a0876763aa9cad36e34454b653152709f

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