来段python watchdog 的例子
时间: 2023-08-31 16:35:25 浏览: 295
python中文件变化监控示例(watchdog)
### 回答1:
示例代码:import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print("文件发生了变化!")if __name__ == "__main__":
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='.', recursive=True)
observer.start() try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
### 回答2:
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print("文件被修改: {}".format(filename))
def on_created(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print("文件被创建: {}".format(filename))
def on_deleted(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print("文件被删除: {}".format(filename))
def on_moved(self, event):
src_filepath = event.src_path
dest_filepath = event.dest_path
src_filename = os.path.basename(src_filepath)
dest_filename = os.path.basename(dest_filepath)
print("文件被移动: {} -> {}".format(src_filename, dest_filename))
if __name__ == "__main__":
event_handler = MyHandler()
observer = Observer()
path = "./" # 监测当前目录下的文件变动
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
以上是一个简单的使用Python watchdog库的例子。首先我们定义了一个继承自FileSystemEventHandler的自定义类MyHandler,重写了on_modified()、on_created()、on_deleted()和on_moved()四个方法,分别处理文件被修改、文件被创建、文件被删除和文件被移动四种事件。
然后我们在if __name__ == "__main__"的代码块中创建了一个MyHandler对象event_handler,然后创建一个Observer对象observer,设置监测的路径为当前目录下所有文件,并设置递归监测。
然后通过observer.schedule()方法将event_handler与observer关联起来,使用observer.start()启动监测。
最后使用一个无限循环来阻止程序退出,直到捕捉到键盘中断事件(KeyboardInterrupt),将程序停止(observer.stop())并调用observer.join()完成清理工作。
当运行这个脚本时,它将监测当前目录下的文件变动情况,并打印出文件被修改、文件被创建、文件被删除和文件被移动这四种事件的相关信息。
### 回答3:
下面是一个使用Python watchdog库的简单示例:
```python
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 创建一个继承自FileSystemEventHandler的自定义事件处理类
class MyEventHandler(FileSystemEventHandler):
def on_modified(self, event):
# 当检测到文件被修改时,执行该函数
print(f"文件 {event.src_path} 被修改")
# 创建一个Observer对象,并将自定义事件处理类传递给它
observer = Observer()
event_handler = MyEventHandler()
# 监听当前目录下的文件修改事件
observer.schedule(event_handler, path='.', recursive=False)
# 启动Observer,并开始监控文件修改事件
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
# 当用户中断程序时,停止监控
observer.stop()
# 等待监控线程结束
observer.join()
```
在上述示例中,我们首先导入了`Observer`和`FileSystemEventHandler`类。然后,我们创建了一个自定义的事件处理类`MyEventHandler`,它继承了`FileSystemEventHandler`。在自定义的事件处理类中,我们重写了`on_modified`方法,该方法在监测到文件被修改时会被触发,并打印出被修改的文件路径。
接下来,我们创建了一个`Observer`对象,并将自定义的事件处理类传递给它。然后,我们使用`observer.schedule`方法来告诉`Observer`对象监控当前目录下的文件修改事件。`path`参数指定了要监控的目录,`recursive`参数用于指定是否递归地监控子目录。
最后,我们通过调用`observer.start()`方法来启动监控线程,并使用一个无限循环来让程序保持运行。如果用户按下Ctrl+C中断程序,我们通过调用`observer.stop()`方法来停止监控,并使用`observer.join()`方法等待监控线程结束。
总之,这个例子演示了如何使用watchdog库来监控文件的修改事件,这对于需要实时监控文件变化并采取相应措施的应用程序非常有用。
阅读全文