学习笔记:python watchdog运维监控文件系统事件实战

简介: 相见恨晚的watchdog库,运维监视文件系统神器。

情况介绍
由于公司准备做Jenkins的前端自动化发布,但是前端的Node.js环境不统一,所以暂时先搁置,采用Ftp上传文件更新项目,因此想到了可以采用文件监控的形式来进行自动化上传。Python语言的优越性就体现出来了,其中有很多很棒的库,本篇即将用到的就是watchdog库。

watchdog库介绍
watchdog用来监控指定目录文件的变化,例如添加删除文件或目录,修改文件内容、重命名文件或目录等,每种变化都会产生一个事件,且有一个特定的事件类与之对应,然后再通过事件处理类来处理对应的事件,至于怎么样处理事件完全可以自定义,只需继承事件处理类的基类并重写对应实例方法。

75c6590de715795c7c69185c50cec9282ca12fc6

实战准备
1.Python环境(系统自带Python2.7.5)
2.安装watchdog库(pip install watchdog)

实例演示

#!/usr/bin/python
# -*- coding:UTF-8 -*-
import time
from watchdog.observers import Observer
from watchdog.events import RegexMatchingEventHandler
import commands
class MyHandler(RegexMatchingEventHandler):

def __init__(self, regex_list=[r”.*”]):
super(MyHandler, self).__init__(regex_list)

def on_created(self, event):
if event.is_directory:
pass
else:
print(event.event_type, event.src_path)

def on_deleted(self, event):
if event.is_directory:
pass
else:
print(event.event_type, event.src_path)

def on_modified(self, event):
if event.is_directory:
pass
else:
print(event.event_type, event.src_path)
node = event.src_path.split(‘/’,3)[2]
if node == “cp”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_cp.yml’)
elif node == “genpindao”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_genpindao.yml’)
elif node == “login”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_login.yml’)
elif node == “ucenter”:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_ucenter.yml’)
else:
commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node.yml -e node=’+node)
def on_moved(self, event):
print(“move”, event.src_path, event.dest_path)

if __name__ == “__main__”:
reges = [r”.*\.c”, r”.*\.h”, r”.*\.cpp”]
event_handler = MyHandler(reges)
observer = Observer()
observer.schedule(event_handler, “/node_ftp/”, recursive=True)
observer.start()

try:
while True:
time.sleep(2)
except KeyboardInterrupt:
observer.stop()
observer.join()

实例分析
watchdog主要采用观察者模型。主要有三个角色:observer,event_handler,被监控的文件夹。三者原本是独立的,主要通过observer.schedule函数将三者串起来,意思为observer不断检测调用平台依赖代码对监控文件夹进行变动检测,当发现改变时,通知event_handler处理。
关键点:
1.on_modified方法,是文件有变化触发的函数,上传Ftp目录后就需要调用此方法。
2.event是获取具体文件的路径,文中是为了获取具体的项目名称而进行的目录处理。
3.commands.getstatusoutput方法是调用系统的Shell命令。
4.observer.schedule方法第二个参数就是监控的具体的目录。

Tips:最后可以推荐读者有时间可以阅读一下watchdog的源码,写的清晰易懂而且架构很好。

相关文章
|
17天前
|
存储 缓存 JavaScript
python实战篇:利用request库打造自己的翻译接口
python实战篇:利用request库打造自己的翻译接口
29 1
python实战篇:利用request库打造自己的翻译接口
|
24天前
|
存储 C语言 Python
【Python】学习笔记day3
【Python】学习笔记day3
27 1
|
1月前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
1月前
|
监控 Linux API
实时监控文件系统:探索Python Watchdog库的神奇之处!
实时监控文件系统:探索Python Watchdog库的神奇之处!
|
3天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
19 1
|
3天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
11 1
Flask框架在Python面试中的应用与实战
|
4天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
25 6
|
7天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
8天前
|
API 调度 开发者
深入理解Python异步编程:从Asyncio到实战应用
在现代软件开发中,异步编程技术已成为提升应用性能和响应速度的关键策略。本文将通过实例讲解Python中的异步编程核心库Asyncio的基本概念、关键功能以及其在Web开发中的应用。我们不仅将理论与实践结合,还将展示如何通过实际代码示例解决常见的并发问题,帮助开发者更有效地利用Python进行异步编程。
|
10天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。