# Quickstart

Below we present a simple example that monitors the current directory recursively (which means, it will traverse any sub-directories) to detect changes. Here is what we will do with the API:

1. Create an instance of the `watchdog.observers.Observer` thread class.

2. Implement a subclass of `watchdog.events.FileSystemEventHandler`.

3. Schedule monitoring a few paths with the observer instance attaching the event handler.

4. Start the observer thread and wait for it generate events without blocking our main thread.

By default, an `watchdog.observers.Observer` instance will not monitor sub-directories. By passing `recursive=True` in the call to `watchdog.observers.Observer.schedule()` monitoring entire directory trees is ensured.

## A Simple Example

The following example program will monitor the current directory recursively for file system changes and simply print them to the console:

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

To stop the program, press Control-C.

## Typing

If you are using type annotations it is important to note that `watchdog.observers.Observer` is not actually a class; it is a variable that hold the “best” observer class available on your platform.

In order to correctly type your own code your should use `watchdog.observers.api.BaseObserver`. For example:

    from watchdog.observers import Observer
    from watchdog.observers.api import BaseObserver

    def my_func(obs: BaseObserver) -> None:
        # Do something with obs
        pass

    observer: BaseObserver = Observer()
    my_func(observer)