介绍 Python 控制模块:watchdog 模块
你好,我是本际云服务器推荐网的小编小本本。今天要给大家介绍的是 Python 中的一个控制模块:watchdog 模块,它可以用来监管文件信息转变。

应用和基本使用
举个例子,当我们需要对文件目录进行监管并在变化时记录系统日志,对新增加文件做出相应操作时,我们可以运用 watchdog 模块。比如我们之前做的歌曲高潮提取器,当有音频文件添加到该程序中时,监控器就会自动获取该音频文件的高潮部分。
而对于 Python 程序员来说,写这样的监控器并不难,只是会有很多细节需要注意。此时,watchdog 模块就显得尤为重要了。
首先,你需要确保 Python 和 pip 成功组装在电脑上。如果没有,可以查看我们的超全 Python 组装手册进行组装。如果你想进行数据统计分析,你可以直接使用 Anaconda,它内置了 Python 和 pip。在 Windows 系统中,请开启 Cmd,在 iOS 系统中,请打开 Terminal。如果你想得到更好的编辑体验,我还是更建议使用 VSCode 在线编辑器,把编码内容复制进去,在在线编辑器的终端设备运行指令组装控制模块,这样会更加舒适。终端设备中运行以下指令,即可完成模块的组装。
自定义监控文件变化
watchdog 模块下的 observer 基于 threading.Thread 对象,所以 observer 继承了 threading.Thread 的属性。在代码中,我们需要进行一些关键的步骤,其中包括:
- 配置各项信息;
- 生成事件处理器、监控器;
- 注册事件处理器、配置目录、递归执行(即同时监控子文件夹);
- 启动。
在 LoggingEventHandler 源代码中,on_created 函数可以用来监控文件创建操作。我们可以继承这个类并重载 on_created 函数,实现自定义的一些操作,比如在提取 MP3 音乐文件高潮的过程中记录系统日志。下面是示例代码:
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
from pychorus import find_and_output_chorus
class extractor(LoggingEventHandler):
def on_created(self, event):
super(LoggingEventHandler, self).on_created(event)
what = 'directory' if event.is_directory else 'file'
logging.info("Created %s: %s", what, event.src_path)
NameExt = event.src_path.split('.')
if NameExt[-1] == 'mp3':
logging.info("正在提取音乐高潮...")
output_path = "." + "".join(NameExt[:-1]) + '_high.wav'
find_and_output_chorus(event.src_path, output_path, 30)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s-%(message)s',
datefmt='%Y-%m-%d%H:%M:%S')
path = sys.argv[1] if len(sys.argv) > 1 else '.'
event_handler = extractor()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
你可以自定义一些类似于这样的操作,之后 watchdog 监控器就会自动帮助你记录系统日志并提取音乐高潮。在 Linux 系统下,你还可以和 supervisor 深度搭配使用,还不错吧。至此,本文给大家介绍完了 Python 控制模块 watchdog 模块的基本使用和应用,希望可以解决你们的实际问题。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6898.html
