Python watchdog无法监控指定文件问题求助
问题排查与修复方案
1. 监控路径不匹配(最可能触发无响应的原因)
你代码里设了path=".",但打印提示却写着"Watching directory './app'",这里明显矛盾:
- 要是你在app目录的父文件夹里运行
python app/file_monitor.py,那"."指向的是父文件夹,根本监控不到app目录里的文件; - 要是你在app目录内运行脚本,
"."是对的,但提示信息会误导你。
修复:
直接用脚本所在目录作为监控路径(避免工作目录带来的问题):
path = os.path.abspath(os.path.dirname(__file__))
同时把提示改成和实际监控路径一致:
print(f"File watcher started. Watching directory {path}. Press Ctrl+C to stop.", flush=True)
2. 编辑器保存机制绕过了on_modified事件
很多编辑器(比如VS Code)保存文件时,不是直接修改原文件,而是先创建临时文件再替换原文件,这种操作会触发on_moved或on_created事件,而你的代码只监听了on_modified,所以看不到响应。
修复:
改用on_any_event捕获所有文件事件,再过滤目标文件:
class MyHandler(FileSystemEventHandler): def on_any_event(self, event): if event.is_directory: return if event.src_path.endswith(('file1.py', 'file2.py')): # 后续逻辑不变
3. 备份目录不存在会触发异常
你代码里直接往./backup复制文件,但如果这个目录不存在,shutil.copy2会抛错,导致后续代码跑不起来,甚至handler直接崩溃。
修复:
复制前先创建备份目录:
backup_dir = './backup' os.makedirs(backup_dir, exist_ok=True)
4. 输出缓冲导致看不到打印
Python的标准输出默认有缓冲,可能你修改了文件,但print的内容还没显示出来。给print加flush=True强制刷新:
print("this is modified", flush=True)
修复后的完整代码
import os import time from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import shutil class MyHandler(FileSystemEventHandler): def on_any_event(self, event): if event.is_directory: return if event.src_path.endswith(('file1.py', 'file2.py')): print(f'File modified: {event.src_path}', flush=True) filename = os.path.basename(event.src_path) backup_dir = './backup' os.makedirs(backup_dir, exist_ok=True) new_path = os.path.join(backup_dir, f"{filename}.backup{time.strftime('%Y%m%d-%H%M%S')}") shutil.copy2(event.src_path, new_path) if __name__ == "__main__": event_handler = MyHandler() path = os.path.abspath(os.path.dirname(__file__)) observer = Observer() observer.schedule(event_handler, path, recursive=False) observer.start() try: print(f"File watcher started. Watching directory {path}. Press Ctrl+C to stop.", flush=True) while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
内容的提问来源于stack exchange,提问作者Nano
相关产品推荐
相关产品推荐

