热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python文件夹,文件监听工具(pyinotify,watchdog)

全栈工程师开发手册(作者:栾鹏)架构系列文章pyinotify库支持的监控事件cvarIN_ACCESS:Filewasaccesse


全栈工程师开发手册 (作者:栾鹏)
架构系列文章





pyinotify库

支持的监控事件

@cvar IN_ACCESS: File was accessed.
@type IN_ACCESS: int
@cvar IN_MODIFY: File was modified.
@type IN_MODIFY: int
@cvar IN_ATTRIB: Metadata changed.
@type IN_ATTRIB: int
@cvar IN_CLOSE_WRITE: Writtable file was closed.
@type IN_CLOSE_WRITE: int
@cvar IN_CLOSE_NOWRITE: Unwrittable file closed.
@type IN_CLOSE_NOWRITE: int
@cvar IN_OPEN: File was opened.
@type IN_OPEN: int
@cvar IN_MOVED_FROM: File was moved from X.
@type IN_MOVED_FROM: int
@cvar IN_MOVED_TO: File was moved to Y.
@type IN_MOVED_TO: int
@cvar IN_CREATE: Subfile was created.
@type IN_CREATE: int
@cvar IN_DELETE: Subfile was deleted.
@type IN_DELETE: int
@cvar IN_DELETE_SELF: Self (watched item itself) was deleted.
@type IN_DELETE_SELF: int
@cvar IN_MOVE_SELF: Self (watched item itself) was moved.
@type IN_MOVE_SELF: int
@cvar IN_UNMOUNT: Backing fs was unmounted.
@type IN_UNMOUNT: int
@cvar IN_Q_OVERFLOW: Event queued overflowed.
@type IN_Q_OVERFLOW: int
@cvar IN_IGNORED: File was ignored.
@type IN_IGNORED: int
@cvar IN_ONLYDIR: only watch the path if it is a directory (newin kernel 2.6.15).
@type IN_ONLYDIR: int
@cvar IN_DONT_FOLLOW: don't follow a symlink (new in kernel 2.6.15).IN_ONLYDIR we can make sure that we don't watchthe target of symlinks.
@type IN_DONT_FOLLOW: int
@cvar IN_EXCL_UNLINK: Events are not generated for children after theyhave been unlinked from the watched directory.(new in kernel 2.6.36).
@type IN_EXCL_UNLINK: int
@cvar IN_MASK_ADD: add to the mask of an already existing watch (newin kernel 2.6.14).
@type IN_MASK_ADD: int
@cvar IN_ISDIR: Event occurred against dir.
@type IN_ISDIR: int
@cvar IN_ONESHOT: Only send event once.
@type IN_ONESHOT: int
@cvar ALL_EVENTS: Alias for considering all of the events.
@type ALL_EVENTS: int

python 3.6的demo

import sys
import os
import pyinotifyWATCH_PATH = '/home/lp/ftp' # 监控目录if not WATCH_PATH:print("The WATCH_PATH setting MUST be set.")sys.exit()
else:if os.path.exists(WATCH_PATH):print('Found watch path: path=%s.' % (WATCH_PATH))else:print('The watch path NOT exists, watching stop now: path=%s.' % (WATCH_PATH))sys.exit()# 事件回调函数
class OnIOHandler(pyinotify.ProcessEvent):# 重写文件写入完成函数def process_IN_CLOSE_WRITE(self, event):# logging.info("create file: %s " % os.path.join(event.path, event.name))# 处理成小图片,然后发送给grpc服务器或者发给kafkafile_path = os.path.join(event.path, event.name)print('文件完成写入',file_path)# 重写文件删除函数def process_IN_DELETE(self, event):print("文件删除: %s " % os.path.join(event.path, event.name))# 重写文件改变函数def process_IN_MODIFY(self, event):print("文件改变: %s " % os.path.join(event.path, event.name))# 重写文件创建函数def process_IN_CREATE(self, event):print("文件创建: %s " % os.path.join(event.path, event.name))def auto_compile(path='.'):wm = pyinotify.WatchManager()# mask = pyinotify.EventsCodes.ALL_FLAGS.get('IN_CREATE', 0)# mask = pyinotify.EventsCodes.FLAG_COLLECTIONS['OP_FLAGS']['IN_CREATE'] # 监控内容,只监听文件被完成写入mask = pyinotify.IN_CREATE | pyinotify.IN_CLOSE_WRITEnotifier = pyinotify.ThreadedNotifier(wm, OnIOHandler()) # 回调函数notifier.start()wm.add_watch(path, mask, rec=True, auto_add=True)print('Start monitoring %s' % path)while True:try:notifier.process_events()if notifier.check_events():notifier.read_events()except KeyboardInterrupt:notifier.stop()breakif __name__ == "__main__":auto_compile(WATCH_PATH)print('monitor close')

watchdog库

支持的监控事件

EVENT_TYPE_MODIFIED: self.on_modified,
EVENT_TYPE_MOVED: self.on_moved,
EVENT_TYPE_CREATED: self.on_created,
EVENT_TYPE_DELETED: self.on_deleted,

需要注意的是,文件改变,也会触发文件夹的改变

python3.6的demo

#! /usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_functionimport asyncio
import base64
import logging
import os
import shutil
import sys
from datetime import datetimefrom watchdog.events import FileSystemEventHandler
from watchdog.observers import ObserverWATCH_PATH = '/home/lp/ftp' # 监控目录class FileMonitorHandler(FileSystemEventHandler):def __init__(self, **kwargs):super(FileMonitorHandler, self).__init__(**kwargs)# 监控目录 目录下面以device_id为目录存放各自的图片self._watch_path = WATCH_PATH# 重写文件改变函数,文件改变都会触发文件夹变化def on_modified(self, event):if not event.is_directory: # 文件改变都会触发文件夹变化file_path = event.src_pathprint("文件改变: %s " % file_path)if __name__ == "__main__":event_handler = FileMonitorHandler()observer = Observer()observer.schedule(event_handler, path=WATCH_PATH, recursive=True) # recursive递归的observer.start()observer.join()

推荐阅读
  • 动量|收益率_基于MT策略的实战分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于MT策略的实战分析相关的知识,希望对你有一定的参考价值。基于MT策略的实战分析 ... [详细]
  • 关于python调试大法的信息
    本文目录一览:1、pdbpython调试怎么用 ... [详细]
  • Python异常处理python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。异常处理:本站Python教程会 ... [详细]
  • vue使用
    关键词: ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 我正在编写一个脚本,它将根据以下内容从基本HTML页面中提取数据:URL中的第一个参数在-90.0和90.0(含)之间浮动,第二个数字在- ... [详细]
  • 在 IMDB 情感分类任务上训练双向 LSTM
    代码如下在这里插入代码片from__future__importprint_functionimportnumpyasnpfromkeras.preprocessingimpo ... [详细]
  • 网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linu ... [详细]
  • 本文涉及源码版本为2.6.9准备工作down一份Vue源码,从package.json入手,找我们需要的代码1、package.json中的scripts,build:nodesc ... [详细]
  • java多线程获取线程返回结果
    我们在使用java多线程编写相关业务代码时,往往有这样一种情况,某个线程依赖于其他线程执行结果。也就是说,我们需要在一个线程中获取另一个线程的信息。可以分为两种情况,一种是轮询,一 ... [详细]
  • unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,Syst ... [详细]
author-avatar
小果康康维五_469
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有