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://xiahunao.cn/news/3019070.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【数据库原理及应用】期末复习汇总高校期末真题试卷07

试卷 一、填空题(每空1分,共10分) 1.数据库管理系统在外模式、模式和内模式这三级模式之间提供了两层映象,其中 映象保证了数据的逻辑独立性。 2. 数据模型通常由 、数据操作和完整性约束三部分组…

Hive SQL-DML-insert插入数据

Hive SQL-DML-insert插入数据 1. 插入静态数据 可以直接插入具体的值到Hive表中: INSERT INTO TABLE tablename (column1, column2, column3) VALUES (value1, value2, value3),(value4, value5, value6),...;2. 插入查询结果 将一条查询的结果直接插入到另一个表中…

红帽发布Red Hat Enterprise Linux AI(RHEL AI)

红帽 2024 峰会正在科罗拉多州丹佛市举行…鉴于当前的时代背景,人工智能(AI)在此次峰会上占据了重要位置,因此红帽公司(Red Hat)也不甘人后宣布推出 RHEL AI。 红帽公司今天发布了 Red Hat Enterprise Lin…

汽车电子零部件(12):BEV, PHEV, HEV, FCEV

在考虑向电动汽车(纯电动汽车、HEV、FCEV、PHEV)过渡时,会听到很多缩写词。这可能有点让人不知所措,那就来谈谈它们的含义。 电动汽车EV (Electric Vehicles) 最广泛的类别是简单的电动汽车,即电动汽车。这些被定义为仅依靠电力进行推进的设计。这一群体包括流行的电动汽…

RTT事件集

事件集 事件集是线程间同步的机制之一,一个事件集可以包含多个事件,利用事件集可以完成一对多,多对多的线程间同步。 下面以坐公交为例说明事件,在公交站等公交时可能有以下几种情况: ①P1 坐公交去某地&#xff0c…

基于SpringBoot的高校推荐系统

项目介绍 当前,随着高等教育的不断普及,越来越多的学生选择考研究生来提高自身的学术水平和竞争力。然而,考研生在选择报考院校和专业时面临着众多的选择和信息不对称的问题。为了解决这些问题,一些网站和APP已经推出了相关的院校…

OpenAI泄密者加入马斯克xAI,技术版图扩张;OpenAI推出可识别DALL·E 3图像的AI检测工具

🦉 AI新闻 🚀 OpenAI泄密者加入马斯克xAI,技术版图扩张 摘要:最近,曾在OpenAI任职并被指控泄露机密的Pavel Izmailov迅速加入了马斯克旗下的xAI团队,成为研究员。在加入之前,Izmailov因涉嫌泄…

CAN报文总线仲裁机制

对于标准帧而言,有11位的标识符,也就是报文的ID。报文的ID值越小,优先级越高。如果有两个以上的ECU同时发送CAN报文,ID值小的报文可以发送成功。总线仲裁机制是一种非破坏性仲裁,是一种既不会造成已发送数据的延迟&…

天龙怀旧游戏python脚本

设置图: 游戏窗口最大化。​​​​​​​ 海贼洞这里定位你要回点的定位。 运行bat就行,脚本出错了还是会重新运行脚本,运行自动启动,end暂停脚本,home重新启动脚本 1. 我常用的是内挂回点脚本,下面都是…

Android内核之Binder通信写操作:binder_thread_write用法实例(七十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

vue3+elementPlus:el-input输入框设置数字小数点

<el-input-numberplaceholder"请输入"v-model.number"scope.row.threeValue"class"mx-4":step"0.001" //精度controls-position"right" //幅度/></template> 上一篇文章&#xff0c; vue3echarts&#xff1a;e…

如何更好地使用Kafka? - 事先预防篇

要确保Kafka在使用过程中的稳定性&#xff0c;需要从kafka在业务中的使用周期进行依次保障。主要可以分为&#xff1a;事先预防&#xff08;通过规范的使用、开发&#xff0c;预防问题产生&#xff09;、运行时监控&#xff08;保障集群稳定&#xff0c;出问题能及时发现&#…

windows10打印机共享完美解决方案

提到文件共享大家并不陌生,相关的还有打印机共享,这个多见于单位、复印部,在一个区域网里多台电脑共用一台打印机,打印资料非常方便,就包括在家里,我们现在一般都会有多台电脑或设备,通过家庭网络联接,如果共享一台打印机的话也是件便捷的事。 但是随着操作系统的更新…

【IP:Internet Protocol,子网(Subnets),IPv6:动机,层次编址:路由聚集(rout aggregation)】

文章目录 IP&#xff1a;Internet Protocol互联网的的网络层IP分片和重组&#xff08;Fragmentation & Reassembly&#xff09;IP编址&#xff1a;引论子网&#xff08;Subnets&#xff09;特殊IP地址IP 编址: CIDR子网掩码&#xff08;Subnet mask&#xff09;转发表和转发…

Linux学习笔记:信号

信号 在Linux中什么是信号信号的产生方式硬件产生的信号软件产生的信号异常产生的信号 进程对信号的处理信号的保存信号方法更改函数signal信号处理的更改恢复默认信号忽略 信号的管理信号集 sigset_t对信号集的操作 信号的捕捉过程 在Linux中什么是信号 在 Linux 系统中&…

如何备考PMP才能一次通过?

PMP备考一个月就能通过&#xff0c;培训机构中就应该这么学&#xff01; PMP考试的难度其实并没有大家想象中的那么大&#xff0c;现在培训机构的通过率基本也在90%以上&#xff0c;而这90%以上也基本都是头一次参加考试很少有参加重考的学员。我就是在威班PMP培训了一个多月一…

JVS物联网平台5.7功能新增说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

深度学习Day-16:实现天气预测

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a;根据提供的数据集对RainTomorrow进行预测 一、 基础配置 语言环境&#xff1a;Python3.7编译器选择…

yolov8任务之目标检测

对象检测 对象检测是一项涉及识别图像或视频流中对象的位置和类别的任务。对象检测器的输出是一组包围图像中对象的边界框&#xff0c;以及每个框的类标签和置信度分数。当您需要识别场景中感兴趣的对象&#xff0c;但不需要确切知道对象在哪里或其确切形状时&#xff0c;对象检…

短视频矩阵系统源码saas开发--可视化剪辑、矩阵托管、多功能合一开发

短视频矩阵系统源码saas开发&#xff08;可视化剪辑、矩阵托管、智能私信聚合、线索转化、数据看板、seo关键词、子账号等多个板块开发&#xff09; 短视频矩阵系统是一种集成了多种功能的系统&#xff0c;旨在帮助用户在短视频平台上进行高效的内容创作、管理和发布。根据您提…