Como monitorar pastas em tempo real com Python e watchdog

Publicado em: 26/03/2026
Tempo de leitura: 9 minutos

Monitorar pastas em tempo real com Python e watchdog é uma das formas mais eficientes de criar sistemas automatizados que reagem instantaneamente a mudanças em arquivos. Imagine um cenário onde, assim que você salva uma imagem em uma pasta, um script Python a redimensiona automaticamente, ou quando um novo relatório em PDF surge em um diretório, ele é enviado por e-mail sem qualquer intervenção humana. Essa capacidade de “vigiar” o sistema de arquivos transforma scripts comuns em ferramentas poderosas de fluxo de trabalho inteligente. Neste guia, vamos explorar como a biblioteca watchdog funciona e como você pode implementar um monitor robusto do zero.

O que é a biblioteca Watchdog e por que utilizá-la?

A biblioteca watchdog é uma API Python independente de plataforma e um utilitário de shell para monitorar eventos do sistema de arquivos. Diferente de métodos antigos onde o programa precisava “perguntar” ao sistema operacional se algo mudou a cada segundo (o que consome muito processamento), o watchdog utiliza ganchos nativos do sistema. Isso significa que ele é notificado pelo próprio Windows, Linux ou macOS assim que um evento ocorre, tornando o uso de recursos extremamente baixo enquanto mantém uma resposta imediata.

Aprender a usar essa ferramenta é um passo fundamental no roadmap Python de qualquer desenvolvedor que deseje focar em engenharia de dados ou automação de infraestrutura. Além da eficiência, o watchdog consegue distinguir entre diversos tipos de eventos, como a criação de um arquivo, a modificação de seu conteúdo, a movimentação entre pastas ou a sua exclusão definitiva.

Configurando o ambiente para o monitoramento

Antes de começarmos a codificar, precisamos garantir que as ferramentas corretas estejam instaladas. O Python possui um vasto ecossistema, e saber como instalar bibliotecas no Python é o primeiro passo para qualquer projeto de sucesso. O watchdog não faz parte da biblioteca padrão, portanto, precisamos do gerenciador de pacotes pip.

Instalação do Watchdog

Abra o seu terminal ou prompt de comando e execute o seguinte comando:

Bash
pip install watchdog

É altamente recomendável que você utilize um ambiente virtual venv no Python para este projeto. Isso evita conflitos entre versões de bibliotecas em diferentes projetos no seu computador. Após a instalação, você terá acesso aos módulos necessários para criar seu observador de arquivos.

Entendendo a estrutura do Watchdog: Observer e Handler

Para monitorar pastas em tempo real com Python e watchdog, você precisa entender dois conceitos principais: o Observer (Observador) e o FileSystemEventHandler (Manipulador de Eventos). O Observer é a classe responsável por rodar em segundo plano, patrulhando a pasta escolhida. Já o Handler é onde definimos a “inteligência” do script, ou seja, o que deve acontecer quando um arquivo for modificado.

Pense no Observer como um segurança que vigia uma porta, e no Handler como o protocolo que ele segue: “Se alguém chegar, peça o RG; se alguém sair, anote o horário”. No Python, personalizamos esse comportamento herdando as funcionalidades da classe base do watchdog e sobrescrevendo seus métodos internos.

Criando o Manipulador de Eventos Personalizado

O primeiro passo prático é criar uma classe que define as ações. Usaremos os métodos on_modified, on_created, on_deleted e on_moved. Cada um desses métodos recebe um objeto de evento que contém informações valiosas, como o caminho do arquivo (path) e se o evento refere-se a um diretório ou um arquivo comum.

Python
from watchdog.events import FileSystemEventHandler

class MeuManipulador(FileSystemEventHandler):
    def on_modified(self, event):
        print(f"O arquivo {event.src_path} foi modificado!")

    def on_created(self, event):
        print(f"Novo arquivo detectado: {event.src_path}")

Nesta etapa, é comum encontrar erros se o caminho do arquivo contiver caracteres especiais. Por isso, é vital saber como resolver erros de codificação utf-8 Python para que seu script não pare de funcionar inesperadamente ao ler nomes de arquivos com acentos.

Implementando o Loop Principal do Observer

Com o manipulador pronto, precisamos configurar o motor que manterá o script rodando. O Observer utiliza threads para não travar a execução principal do programa. Precisamos informar a ele qual pasta vigiar e se ele deve olhar também as subpastas (recursividade). Ao trabalhar com diretórios, a biblioteca pathlib é uma excelente aliada para garantir que os caminhos funcionem tanto em Windows quanto em Linux.

Python
import time
from watchdog.observers import Observer

observer = Observer()
handler = MeuManipulador()
observer.schedule(handler, path='caminho/da/pasta', recursive=False)

observer.start()
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()

Note que usamos um bloco try-except para capturar o comando de parada (Ctrl+C). Sem isso, o observer poderia continuar rodando em segundo plano mesmo após você fechar o terminal. O uso do módulo time em Python com o sleep(1) é essencial para evitar que o loop while True consuma 100% da sua CPU desnecessariamente.

Filtrando tipos de arquivos específicos

Muitas vezes, não queremos monitorar todos os arquivos, apenas extensões específicas como .json, .csv ou .txt. Podemos implementar essa lógica dentro do nosso manipulador usando condicionais simples ou o match-case do Python para uma estrutura mais limpa. Se o objetivo for ler o conteúdo de arquivos assim que eles surgem, você pode integrar a lógica para ler arquivos txt no Python de forma automática.

Por exemplo, se um arquivo .csv for detectado, o script pode disparar um processo de limpeza de dados usando Pandas. Se for um arquivo de log, ele pode procurar por palavras-chave de erro e enviar um alerta.

Lidando com permissões e erros de acesso

Ao monitorar pastas do sistema ou diretórios de rede, seu script pode enfrentar problemas de acesso. É frustrante ver seu código parar por causa de um PermissionError Python. Isso acontece geralmente quando o Python tenta ler um arquivo que ainda está sendo escrito por outro programa ou quando o usuário não tem privilégios administrativos.

Para mitigar isso, você pode implementar uma pequena espera (delay) antes de tentar acessar o arquivo criado ou usar blocos try-except robustos para ignorar arquivos temporários do sistema que são criados e deletados em milissegundos.

Boas práticas: Logging e Performance

Em sistemas de produção, imprimir no console com print() não é suficiente. É melhor utilizar o módulo logging do Python para gravar o histórico de eventos em um arquivo. Isso permite auditar o que aconteceu durante a madrugada, por exemplo, se um arquivo sumiu misteriosamente.

Quanto à performance, se você estiver monitorando uma pasta com milhares de arquivos criados simultaneamente, o processamento sequencial pode se tornar um gargalo. Nesses casos avançados, considere enviar as tarefas para uma fila de processamento ou usar threads separadas para cada tarefa pesada, garantindo que o Observer nunca pare de ouvir novos eventos.

Código Completo do Projeto

Aqui está o código unificado e pronto para uso. Ele monitora a criação, modificação e exclusão de arquivos na pasta onde o script for executado. Basta salvar como monitor.py e rodar.

Python
import time
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class GerenciadorDeEventos(FileSystemEventHandler):
    """Classe que define o comportamento ao detectar mudanças."""
    
    def on_created(self, event):
        tipo = "Pasta" if event.is_directory else "Arquivo"
        print(f"[CRIADO] {tipo}: {event.src_path}")

    def on_modified(self, event):
        tipo = "Pasta" if event.is_directory else "Arquivo"
        print(f"[MODIFICADO] {tipo}: {event.src_path}")

    def on_deleted(self, event):
        tipo = "Pasta" if event.is_directory else "Arquivo"
        print(f"[DELETADO] {tipo}: {event.src_path}")

    def on_moved(self, event):
        print(f"[MOVIDO] De {event.src_path} para {event.dest_path}")

if __name__ == "__main__":
    # Define o caminho a ser monitorado (neste caso, a pasta atual '.')
    caminho_para_monitorar = "."
    
    # Configura o manipulador e o observador
    event_handler = GerenciadorDeEventos()
    observer = Observer()
    observer.schedule(event_handler, caminho_para_monitorar, recursive=False)

    print(f"Iniciando monitoramento em: {os.path.abspath(caminho_para_monitorar)}")
    print("Pressione Ctrl+C para encerrar.")
    
    observer.start()
    
    try:
        while True:
            # Mantém o script vivo sem consumir muita CPU
            time.sleep(1)
    except KeyboardInterrupt:
        print("\nFinalizando monitoramento...")
        observer.stop()
    
    observer.join()

Este script é a base perfeita para automações. Você pode expandi-lo para, por exemplo, fazer um backup automático com Python sempre que um arquivo importante for alterado. A flexibilidade do watchdog permite que você escale esse pequeno utilitário para um sistema de gestão de ativos complexo conforme suas necessidades crescem.

Para referências técnicas mais profundas sobre como o Kernel do sistema gerencia esses eventos, você pode consultar a documentação oficial do Inotify para Linux ou analisar os detalhes de implementação na página oficial do projeto Watchdog no PyPI.

Perguntas Frequentes

O watchdog funciona em pastas de rede (NAS)?

Sim, mas depende do protocolo. Em mapeamentos SMB/CIFS, o watchdog geralmente funciona, mas pode haver atrasos ou eventos perdidos se o servidor de rede não enviar as notificações corretamente para o seu sistema operacional local.

Como monitorar apenas arquivos com extensão .PDF?

Dentro do método on_created, você pode usar uma verificação simples: if event.src_path.endswith(".pdf"): para filtrar as ações e ignorar outros formatos.

O script consome muita memória RAM?

Não. O watchdog é extremamente leve pois utiliza notificações do sistema. O consumo de memória dependerá muito mais do que você faz com os arquivos detectados do que do monitoramento em si.

Posso rodar o script como um serviço do Windows?

Com certeza. Você pode usar bibliotecas como pywin32 ou criar um executável e agendá-lo para que o monitoramento inicie assim que o computador ligar.

O watchdog detecta se um arquivo foi aberto apenas para leitura?

Não. O watchdog foca em alterações estruturais (escrita, criação, exclusão, movimentação). Ele não notifica apenas acessos de leitura.

E se eu deletar uma pasta com subpastas dentro?

Se o parâmetro recursive=True estiver ativado, o watchdog disparará eventos para cada item dentro da pasta excluída. Caso contrário, ele notificará apenas a exclusão do diretório pai.

Como evitar eventos duplicados ao salvar um arquivo?

Alguns editores salvam arquivos temporários antes de sobrescrever o original, gerando vários eventos de “modificação”. Uma solução comum é comparar o tamanho do arquivo ou usar um pequeno delay para processar apenas após a última alteração.

É possível monitorar o computador inteiro?

Tecnicamente sim, mas não é recomendado. Monitorar C:\ ou / gerará milhares de eventos por segundo devido aos logs do sistema, o que certamente causará lentidão e gargalos no processamento.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Bibliotecas e Módulos
    Foto do Leandro Hirt

    Sem internet? Instale pacotes Python offline em minutos

    Você já se deparou com a situação frustrante de precisar instalar uma biblioteca específica em um servidor isolado ou em

    Ler mais

    Tempo de leitura: 11 minutos
    25/03/2026
    Bibliotecas e Módulos
    Foto do Leandro Hirt

    Compacte arquivos ZIP com Python em 2 minutos

    Aprender como compactar arquivos ZIP com Python é uma das habilidades mais úteis para quem deseja otimizar o armazenamento de

    Ler mais

    Tempo de leitura: 10 minutos
    24/03/2026
    Bibliotecas e Módulos
    Foto do Leandro Hirt

    Copie e mova arquivos em Python com shutil em 2 minutos

    Você já precisou organizar centenas de arquivos em pastas específicas e desistiu por causa do trabalho manual? Se você está

    Ler mais

    Tempo de leitura: 10 minutos
    23/03/2026
    Bibliotecas e Módulos
    Foto do Leandro Hirt

    Como redimensionar imagens com Pillow em Python

    Redimensionar imagens é uma das tarefas mais comuns e fundamentais no processamento de dados visuais. Seja para otimizar o carregamento

    Ler mais

    Tempo de leitura: 10 minutos
    28/02/2026
    FundamentosBibliotecas e Módulos
    Foto do Leandro Hirt

    Descubra como gerar números aleatórios seguros com secrets

    Você já parou para pensar como o seu computador decide qual será o próximo número em um sorteio? No mundo

    Ler mais

    Tempo de leitura: 9 minutos
    27/02/2026
    Bibliotecas e Módulos
    Foto do Leandro Hirt

    Entendendo o módulo collections em Python

    O módulo collections é uma das ferramentas mais poderosas e subutilizadas da biblioteca padrão do Python. Embora os tipos de

    Ler mais

    Tempo de leitura: 10 minutos
    17/02/2026