Watchdog,一双专为 Python 而生的守护者之眼

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。

一个简单的库,也许能够开启我们的智慧之门,
一个普通的方法,也许能在危急时刻挽救我们于水深火热,
一个新颖的思维方式,也许能激发我们无尽的创造力,
一个独特的技巧,也许能成为我们的隐形盾牌……


神奇的 Python 库之旅,第 3

目录

    • 一、神秘的 Watchdog
    • 二、Watchdog 应用场景
    • 三、总结
    • 四、作者Info

一、神秘的 Watchdog

在程序员的世界里,有一种神奇的力量,它能够守护着我们的代码,保障程序的正常运行。

这个力量就是 Python 第三方库 Watchdog。今天,让我们一起揭开这位守护者的神秘面纱,探索它的奥秘与魅力。

Watchdog 是 Python 中一个用于监视文件系统变化的库,它能够监控文件或目录的变化,并在变化发生时触发相应的事件,比如文件的创建、修改、删除等。

简单来说,就像是给你的文件系统装上了一双“守护者之眼”,时刻关注着文件的一举一动。
在这里插入图片描述


安装 Watchdog

pip install watchdog -i https://pypi.doubanio.com/simple

这里使用国内豆瓣镜像源安装会更快。

Github 项目地址

https://github.com/gorakhargosh/watchdog

二、Watchdog 应用场景

那么,我们如何与这位守护者相遇呢?别着急,接下来我将为大家介绍几个与 Watchdog 相遇的奇妙场景。

场景一:文件同步
小明是一名程序员,他经常需要在不同的机器之间同步文件。以前,他总是需要手动复制、粘贴文件,非常麻烦。但自从他遇到了 Watchdog,一切都变得不一样了。

他写了一个简单的 Python 脚本,使用 Watchdog 监控源文件夹的变化,一旦有文件被修改,就立即同步到目标文件夹。于是,小明再也不用担心文件同步的问题了,一切都变得轻松自如。

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass MyHandler(FileSystemEventHandler):def on_modified(self, event):# 文件被修改时触发print(f'{event.src_path} has been modified')if __name__ == "__main__":path = '.'  # 监控当前目录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()


场景二:自动化测试
小红是一名测试工程师,她经常需要运行自动化测试脚本来检查软件的稳定性。然而,有时测试过程中会遇到一些意外情况,比如文件被删除或修改了。

为了解决这个问题,小红引入了 Watchdog,让它监控测试用例所在的目录,一旦有文件变化,就立即重新运行测试脚本。这样一来,小红的测试工作变得更加稳定可靠了。

import time
import subprocess
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass MyHandler(FileSystemEventHandler):def on_modified(self, event):# 文件被修改时触发print(f'{event.src_path} has been modified')subprocess.run(['python', 'test_script.py'])  # 重新运行测试脚本if __name__ == "__main__":path = '.'  # 监控当前目录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()


场景三:日志监控
小李是一名运维工程师,他负责维护公司的服务器,并时刻关注着服务器的运行情况。为了及时发现问题,他使用 Watchdog 监控服务器日志文件的变化,

一旦有异常日志产生,就立即发送邮件通知管理员。这样一来,小李能够第一时间发现并解决服务器的问题,保障系统的稳定运行。

import time
import smtplib
from email.mime.text import MIMEText
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass MyHandler(FileSystemEventHandler):def on_modified(self, event):# 文件被修改时触发print(f'{event.src_path} has been modified')send_email('Server Alert', 'An error log has been detected')def send_email(subject, message):# 发送邮件通知from_addr = 'your_email@example.com'to_addr = 'admin@example.com'msg = MIMEText(message)msg['Subject'] = subjectmsg['From'] = from_addrmsg['To'] = to_addrserver = smtplib.SMTP('smtp.example.com', 25)server.login(from_addr, 'your_password')server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()if __name__ == "__main__":path = '/var/log'  # 监控日志文件夹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()

更多功能、详细用法可参考官方文档:

https://pythonhosted.org/watchdog

三、总结

通过上面的三个场景,我们可以看到 Watchdog 在日常开发、测试和运维中的广泛应用。无论是文件同步、自动化测试还是日志监控,Watchdog 都可以为我们提供强大的支持,让我们的工作变得更加轻松和高效。

希望通过本文的介绍,大家对 Watchdog 有了更深入的了解,并能够在实际项目中加以应用。同时,也希望大家能够在编程的道路上不断探索,不断进步,成为更加优秀的程序员!

四、作者Info

Author:小鸿的摸鱼日常,Goal:让编程更有趣! 专注于

Web开发、爬虫,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载,侵权必究!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶 | 仿真测试-HiL测试全解析

1.HiL 的定义 HiL(Hardware-in-the-Loop)硬件在环是计算机专业术语,也即是硬件在回路。通过使用 “硬件在环”(HiL) ,可以显著降低开发时间和成本。在过去,开发电气机械元件或系统时,使用计算机仿真和实际的实验就已经…

antd vue pro (vue 2.x) 多页签详细操作

antd vue pro 多页签配置操作,具体操作如下。 1.引入 tagviews文件 在 store/modules 中创建 tagviews.js ,复制一下代码到文件中保存 const state {visitedViews: [],cachedViews: [] }const mutations {ADD_VISITED_VIEW: (state, view) > {if …

Element-ui-vue3-前端界面开发-配置-编辑main.js-nodejs基础语法-vue3-html模板语法-vue文件编译

前端配置 1.下载nodejs 18 lts2.配置nodejs和安装vue3.vue调试技巧3.1.debugger3.2.vue devtools4.编辑main.js5.nodejs基础语法5.1.import5.1.1.导入单个模块或组件5.1.2.导入整个模块或库5.1.3.导入默认导出5.1.4.导入 css文件5.1.5.导入模块和组件5.2.export5.2.1.命名导出5…

数学建模资料|历年数维杯数学建模竞赛真题及获奖论文汇总

2024年第九届数维杯大学生数学建模挑战赛:2024年5月10日08:00-5月13日09:00举行,为了更好的帮助参赛同学了解竞赛的赛制及赛题特点,数乐君今天给大家整理了历年数维杯国赛真题及优秀论文,方便同学们赛前巩固训练,掌握解题方法,提高获奖率。 2023年数维杯国赛真题(ABC题…

如何在没有备份的情况下恢复 Mac 上丢失的数据

如果您因意外删除、错误格式化硬盘或文件损坏而丢失了重要的、感伤的文件、照片或音乐,那么这可能会令人非常痛苦。幸运的是,您有几个选择。 您的 Mac 位于数字宇宙的中心。您可能会在上面留下照片和视频形式的记忆,以及来自您不再见面的朋友…

前端如何设置div可滚动,且设置滚动条颜色

在前端中,设置 div 为可滚动并通过 CSS 自定义滚动条的颜色并不是所有浏览器都直接支持的功能,因为滚动条的样式在很大程度上取决于操作系统和浏览器的默认样式。然而,你可以使用某些 CSS 属性来尝试自定义滚动条的外观,这些属性在…

C语言 | Leetcode C语言题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; void swap(int *a, int *b) {int t *a;*a *b, *b t; }void sortColors(int *nums, int numsSize) {int p0 0, p2 numsSize - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] 2) {swap(&nums[i], &num…

Linux系统 -- 创建systemd服务单元 Python 程序在系统启动时自动启动,并持续运行。

1. 创建一个名为 model_ai.service 的文件&#xff0c;并将其放置在 /etc/systemd/system/ 目录中。 2. 命令创建和编辑文件 sudo vim /etc/systemd/system/model_ai.service 3. 在打开的编辑器中&#xff0c;添加以下内容&#xff1a; [Unit] DescriptionModel AI Python S…

QT实现Home框架的两种方式

在触摸屏开发QT界面一般都是一个Home页面&#xff0c;然后button触发进入子页面显示&#xff0c;下面介绍这个home框架实现的两种方式&#xff1a; 1.方式一&#xff1a;用stackedWidget实现 &#xff08;1&#xff09;StackedWidget控件在Qt框架中是一个用于管理多个子窗口或…

文件夹名称大小写转换:名称首字母转大写,一种高效的文件管理方法

在日常生活和工作中&#xff0c;电脑文件夹的管理对于提高工作效率和文件检索的便捷性至关重要。文件夹名称的命名规则直接影响到文件组织的有序性和查找的速度。其中&#xff0c;将文件夹名称的首字母转换为大写是一种简单而高效的管理方法&#xff0c;下面我们就来详细探讨实…

Linux提示:mount: 未知的文件系统类型“ntfs”

mount: 未知的文件系统类型“ntfs” 在Linux系统中&#xff0c;如果遇到“mount: 未知的文件系统类型‘ntfs’”的错误&#xff0c;这通常意味着您的系统没有安装支持NTFS文件系统的软件。为了挂载NTFS文件系统&#xff0c;您需要安装ntfs-3g软件包。以下是如何在不同Linux发行…

免费ChatGPT转接地址免费ChatGPT直连地址以及使用方法

依赖环境 Python3.8以上环境 安装依赖包 pip install openai 使用方法-Python #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2024-05-08 8:56 # Author : Jack # File : chat_direct""" chat_direct """ import openai from…

Golang | Leetcode Golang题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; func minWindow(s string, t string) string {ori, cnt : map[byte]int{}, map[byte]int{}for i : 0; i < len(t); i {ori[t[i]]}sLen : len(s)len : math.MaxInt32ansL, ansR : -1, -1check : func() bool {for k, v : range ori {if c…

为什么 ChatGPT 不火了?

不火了是有原因的&#xff0c;下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起&#xff1a; 很多朋友拿到 ChatGPT 后的第一个痛点就是&#xff1a;用的不好 你经常会感觉到 ChatGPT 回答的好空&#xff0c;没有太多参考价值。 而第二个痛点则是&#xff1a;无处去用…

Vue按照顺序实现多级弹窗(附Demo)

目录 前言1. 单个弹窗2. 多级弹窗 前言 强化各个知识点&#xff0c;以实战融合&#xff0c;以下两个Demo从实战提取 1. 单个弹窗 部署按钮框以及确定的方法即可 截图如下所示&#xff1a; 以下Demo整体逻辑如下&#xff1a; 点击“生成周月计划”按钮会触发showWeekPlanDia…

uniapp日期区间选择器

uniapp日期区间选择器 在 uniapp 中创建一个简单的自定义日期范围的日期区间选择器&#xff1a; - 限制有效日期范围开始日期为 2024-01-01&#xff0c;结束日期为当日&#xff1b; - 默认日期区间为当日向前计算的7日区间&#xff1b; - 选择开始时间后&#xff0c;判断不可大…

苹果删除的短信怎么恢复?这里有4个恢复技巧

手机短信已成为我们日常沟通中不可或缺的一部分&#xff0c;其中包含了与家人、朋友的温馨对话&#xff0c;以及与工作伙伴的重要信息。然而&#xff0c;有时我们可能会因为误操作或其他原因不小心删除了重要的短信。请别担心&#xff0c;本文将为您详细介绍删除的短信怎么恢复…

推荐5个免费的国内平替版GPT

提起AI&#xff0c;大家第一个想到的就是GPT。 虽然它确实很厉害&#xff0c;但奈何于我们水土不服&#xff0c;使用门槛有些高。 不过随着GPT的爆火&#xff0c;现在AI智能工具已经遍布到各行各业了&#xff0c;随着时间的推移&#xff0c;国内的AI工具也已经“百花盛放”了…

Python机器学习手册:从预处理到深度学习的实际解决方案

书籍&#xff1a;Machine Learning with Python Cookbook: Practical Solutions from Preprocessing to Deep Learning 作者&#xff1a;Kyle Gallatin&#xff0c;Chris Albon 出版&#xff1a;OReilly Media 书籍下载-《Python机器学习手册&#xff1a;从预处理到深度学习…

数据结构学不会?数据结构可视化网站来了

目录 前言 图码网站 算法可视化 算法编辑器 数据结构全书 数据结构课程 总结 前言 数据结构与算法在计算机的学习中应该是许多小白最头疼的东西&#xff0c;明明听的时候那么容易&#xff0c;为什么转换成代码就那么抽象呢&#xff1f; 有没有一个网站可以数据结构与算…