当前位置:首页 > Python技术文章 > Python文件监听工具pyinotify与watchdog实例

实例详解Python文件监听工具pyinotify和watchdog

  • 发布时间:
  • 作者:码农之家原创
  • 点击:126

这篇文章主要知识点是关于python、pyinotify、watchdog、Python pyinotify模块实现对文档的实时监控功能方法 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下相关资源

Python Docker实战

《 PythonDocker实战 》以1个Python聊天机器人做为围绕全书的实例,根据对这一聊天机器人搭建全过程的解读串连起Docker器皿化的基本內容。根据阅读文章这书,用户将掌握Docker的有关基本知识,

查看详情

Python文件监听工具pyinotify与watchdog实例

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 (new
         in 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 watch
           the target of symlinks.
@type IN_DONT_FOLLOW: int
@cvar IN_EXCL_UNLINK: Events are not generated for children after they
           have 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 (new
          in 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 pyinotify
WATCH_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服务器或者发给kafka
    file_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_WRITE
  notifier = 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()
      break
if __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_function
import asyncio
import base64
import logging
import os
import shutil
import sys
from datetime import datetime
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
WATCH_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_path
   print("文件改变: %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()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对码农之家的支持。如果你想了解更多相关内容请查看下面相关链接

Python pyinotify模块实现对文档的实时监控功能方法

0x01 安装pyinotify

>>> pip install pyinotify
>>> import pyinotify

0x02 实现对文档的试试监控功能

这个功能类似与Ubuntu里的rail -f功能,在对目标文件进行修改时,脚本可以实时监控并将新的修改打印出来。

import pyinotify
import time
import os

class ProcessTransientFile(pyinotify.ProcessEvent):
  def process_IN_MODIFY(self, event):
    line = file.readline()
    if line:
      print line, # already has newline

filename = './test.txt'
file = open(filename,'r')
#Find the size of the file and move to the end
st_results = os.stat(filename)
st_size = st_results[6]
file.seek(st_size)

wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm)
wm.watch_transient_file(filename, pyinotify.IN_MODIFY, ProcessTransientFile)

notifier.loop()

以上这篇Python pyinotify模块实现对文档的实时监控功能方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于Python的全部知识点内容总结,大家还可以在下方相关文章里找到Python工具整理推荐、 python求最大值最小值的实、 Python调用C# Com dll组件的方、 等python文章进一步学习,感谢大家的阅读和支持。

上一篇:7个让代码变得更易维护的Python库总结

下一篇:Python面向对象思想与应用入门教程总结

展开 +

收起 -

pyinotify和watchdog 相关内容
Python机器学习经典实例

《Python机器学习经典实例》首先通过实用的案例介绍机器学习的基础知识,然后介绍一些稍微复杂的机器学习算法,例如支持向量机、极端随机森林、隐马尔可夫模型、条件随机场、深度神经网

查看详情
卷积神经网络的Python实现

解析深度学习 卷积神经网络入门书 基于NumPy的Python语言实现卷积神经网络 直白的方法讲解机器学习

查看详情
Python程序设计入门到实战

Python言语是现在市面上*火爆的程序设计语言之一,除开功能齐全以外,也有迅速入门、随时随地可扩大、社群营销兼容等特点。这书以16章的篇数迅速详细介绍Python言语的精要,包含编程设计

查看详情
给Python点颜色:青少年学编程 查看详情
对比Excel,轻松学习Python数据分析

Python尽管是这门计算机语言,可是在数据分析行业保持的作用和Excel的基本要素相同,而Excel也是大伙儿较为了解、非常容易入门的手机软件,能够根据Excel数据分析去比照学习培训Python数据分

查看详情
Python网络爬虫从入门到实践

这本书讲解了如何使用Python编写网络爬虫程序获取互联网上的大数据,包含基础部分、进阶部分和项目实践三个部分,能带领读者从入门到进阶,再到实战,一步步了解爬虫,终写出自己的爬虫程序,欢迎下载

查看详情
Python数据处理

Python数据处理 采用基于项目的方法,介绍用Python完成数据获取、数据清洗、数据探索、数据呈现、数据规模化和自动化的过程。主要内容包括:Python基础知识,如何从CSV、Excel、XML、JSON和PDF文

查看详情
pyinotify和watchdog 学习笔记
网友NO.676612

python中下标和切片的使用方法解析

下标 所谓下标就是编号,就好比超市中存储柜的编号,通过这个编号就能找到相应的存储空间。 Python中字符串,列表,元祖均支持下标索引。 例如: # 如果想取出部分字符,可使用下标name="abcd"print(name[0])print(name[1])print(name[2])print(name[3])# 输出结果为:# a# b# c# d 切片 切片是指对操作的对象截取一部分的操作,字符串,列表,元组均支持切片操作。 切片的语法:[起始:结束:步长] 注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。 我们以字符串讲解为例: name = "abcdef"print(name[0:3]) # 取下标为0~2的字符,结果为:abcprint(name[0:5]) # 取下标为0~4的字符,结果为:abcdeprint(name[3:5]) # 取下标为3~4的字符,结果为:deprint(name[2:]) # 取下标为2开始一直到最后的字符,结果为:cdefprint(name[0:-1]) # 取下标为0开始到倒数……

网友NO.668957

Python利用IPython提高开发效率

一、IPython 简介 IPython 是一个交互式的 Python 解释器,而且它更加高效。 它和大多传统工作模式(编辑 - 编译 - 运行)不同的是, 它采用的工作模式是: 执行 - 探索 ,而大部分和数据分析相关的代 码都含有探索式操作(比如试误法和迭代法),所以 IPython 能大大提高编码效率。 IPython 发展到现在,它不仅仅只是一个加强版的 Python shell 了, 它集成了 GUI 控制台 ,这可以让你直接进行绘图操作; 它还有一个基于 Web 的交互式笔记本和一个轻量级的快速并行的计算引擎。 二、编写代码 在 Terminal 中输入 ipython 既可启动 IPython。 如果需要使用 Matplotlib 库,则需要在启动的时候标记集成 Matplotlib 包,则启动命令改为:ipython --pylab 1. 学会使用 Tab 键 在输入代码的时候,如果这是一个前面已经输入过的内容(比如前面定义的变量),则只需要在 输入了前几个字……

网友NO.951919

python绘制立方体的方法

本文实例为大家分享了python绘制立方体的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python # This is (almost) a direct C++ to Python transliteration of# VTK-root/Examples/DataManipulation/Cxx/Cube.cxx from the VTK# source distribution, which "shows how to manually create vtkPolyData"## A convenience function, mkVtkIdList(), has been added and one if/else# so the example also works in version 6 or later.## Lines like `obj-Delete()` have been transliterated as `del obj` to,# preserve the resemblance to the original C++ example, although I# doubt this achieves anything beyond what Python's garbage collection# would do anyway. import vtk # Makes a vtkIdList from a Python iterable. I'm kinda surprised that# this is necessary, since I assumed that this kind of thing would# have been built into the wrapper and happen transparently, but it# seems not. def mkVtkIdList(it): vil = vtk.vtkIdList() for i in it: vil.InsertNextId(int(i)) return vil # 绘制通用方……

网友NO.228954

python实现简单配置发送邮件的功能

本篇文章给大家带来的内容是关于python实现简单配置发送邮件的功能,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 本文用第三方类库:yagmail 实现;以QQ邮箱作为发送邮箱为例。 最终的实现效果:给指定邮箱,发送指定内容的邮件。 准备工作 1、用于发送邮件的账号信息 比如账号用自己的qq邮箱,但'密码'需要在邮箱:设置--账户--开启POP3/SMTP服务,开启后会获得授权码(把它理解为'密码'就行~)。 2、邮件服务器的信息 需要邮件服务器的地址和端口,一般在邮箱的帮助中都可以查询到;QQ邮箱为例,服务器地址为:smtp.qq.com,邮箱端口为:465 3、邮件触达相关 邮件标题,内容,收件人等,这些就不多说了。 使用方法 mail = yagmail.SMTP(邮箱账号,密码,邮箱服务器地址,邮箱服务器端口) mail.send(收件人列表,邮件主题,邮件内容) 代码实例 ……

网友NO.100135

什么是pythontry-finally 语句?它能起到什么样的作用?

今天这篇文章我们来了解一下python异常处理之中的 finally异常处理 ,首先我们需要理解 python中finally 语句, tryfinally 将在接下来的文章之中进行讲解以及举例分析。 首先我们要知道try-finally 语句无论是否发生异常都将执行最后的代码。 就如同下面这样: try:语句finally:语句 #退出try时总会执行raise 接下来我们来举个实例: #!/usr/bin/python# -*- coding: UTF-8 -*-try: fh = open(testfile, w) fh.write(这是一个测试文件,用于测试异常!!)finally: print Error: 没有找到文件或读取文件失败 如果打开的文件没有可写权限,输出如下所示: $ python test.py Error: 没有找到文件或读取文件失败 同样的例子也可以写成如下方式: #!/usr/bin/python# -*- coding: UTF-8 -*-try: fh = open(testfile, w) try: fh.write(这是一个测试文件,用于测试异常!!) finally: print 关闭文件 fh.close()except IOError: print Error: 没有找到文件……

<
1
>

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757