python中文件變化監控-watchdog

起步

在python中文件監控主要有兩個庫,一個是pyinotify,一個是watchdog。pyinotify依賴于Linux平臺的inotify,后者則對不同平臺的的事件都進行了封裝。因為我主要用于Windows平臺,所以下面著重介紹watchdog(推薦大家閱讀一下watchdog實現源碼,有利于深刻的理解其中的原理)。
watchdog在不同的平臺使用不同的方法進行文件檢測。在init.py中發現了如下注釋:

|Inotify|                             Linux 2.6.13+                    ``inotify(7)`` based observer
|FSEvents|                            Mac OS X                         FSEvents based observer
|Kqueue|                              Mac OS X and BSD with kqueue(2)  ``kqueue(2)`` based observer
|WinApi|(ReadDirectoryChangesW)       MS Windows                       Windows API-based observer
|Polling|                             Any                              fallback implementation

給出示例代碼如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by victor# 本模塊的功能:<檢測文件夾變化># 導入watchdog對應模塊
from watchdog.observers import Observer
from watchdog.events import *
# 導入時間模塊
import timeclass FileEventHandler(FileSystemEventHandler):# 初始化魔術方法def __init__(self):FileSystemEventHandler.__init__(self)# 文件或文件夾移動def on_moved(self, event):if event.is_directory:print("directory moved from {0} to {1}".format(event.src_path,event.dest_path))else:print("file moved from {0} to {1}".format(event.src_path,event.dest_path))# 創建文件或文件夾def on_created(self, event):if event.is_directory:print("directory created:{0}".format(event.src_path))else:print("file created:{0}".format(event.src_path))# 刪除文件或文件夾def on_deleted(self, event):if event.is_directory:print("directory deleted:{0}".format(event.src_path))else:print("file deleted:{0}".format(event.src_path))# 移動文件或文件夾def on_modified(self, event):if event.is_directory:print("directory modified:{0}".format(event.src_path))else:print("file modified:{0}".format(event.src_path))if __name__ == "__main__":# 實例化Observer對象observer = Observer()event_handler = FileEventHandler()# 設置監聽目錄dis_dir = "e:/"observer.schedule(event_handler,dis_dir,True)observer.start()try:while True:# 設置監聽頻率(間隔周期時間)time.sleep(1)except KeyboardInterrupt:observer.stop()observer.join()

小結

watchdog主要采用觀察者模型(廢話,從變量命名就可以看出來)。主要有三個角色:observer,event_handler,被監控的文件夾。三者原本是獨立的,主要通過observer.schedule函數將三者串起來,意思為observer不斷檢測調用平臺依賴代碼對監控文件夾進行變動檢測,當發現改變時,通知event_handler處理。最后特別推薦讀者有時間可以閱讀一下watchdog的源碼,寫的易懂而且架構很好用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455435.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455435.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455435.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python決策樹分類鳶尾花_基于決策樹—鳶尾花分類

決策樹算法廣泛應用于&#xff1a;語音識別、醫療診斷、客戶關系管理、模式識別、專家系統等&#xff0c;在實際工作中&#xff0c;必須根據數據類型的特點及數據集的大小&#xff0c;選擇合適的算法。本文選擇經典案例——《鳶尾花分類》一、決策樹定義決策樹算法是一種基于實…

希捷宣布出貨雙碟裝1TB硬盤 單碟500GB上市

希捷今天宣布&#xff0c;單碟容量高達500GB的Barracuda 7200.12 1TB硬盤已經出貨。 現有的1TB硬盤產品一般都是三碟裝(此前也有四碟裝)&#xff0c;包括希捷自家的ST31000340AS&#xff0c;但希捷一進率先將其升級為雙碟裝&#xff0c;存儲密度也達到了329Gb每平方英寸。這樣一…

P1334 瑞瑞的木板

題目描述 瑞瑞想要親自修復在他的一個小牧場周圍的圍欄。他測量柵欄并發現他需要N&#xff08;1≤N≤20,000&#xff09;根木板&#xff0c;每根的長度為整數Li&#xff08;1≤Li≤50,000&#xff09;。于是&#xff0c;他神奇地買了一根足夠長的木板&#xff0c;長度為所需的N…

FFMpeg的output_example.c例子分析

該例子講了如何輸出一個libavformat庫所支持格式的媒體文件。 &#xff08;1&#xff09;av_register_all()&#xff0c;初始化libavcodec庫&#xff0c;并注冊所有的編解碼器和格式。 &#xff08;2&#xff09;guess_format()&#xff0c;根據文件名來獲取輸出文件格式&#…

大量數據+同步+多線程_Vulkan 多線程渲染

1. Overview of Vulkan1.1 計算機圖形軟件圖形軟件有兩個大類&#xff1a;專用軟件包&#xff08;special-purpose packages&#xff09;和通用編程軟件包&#xff08;general programming packages&#xff09;。專用軟件包通常提供一種UI設計語言&#xff0c;讓用戶直接生成想…

飛康任命Gartner前分析師擔任亞洲區市場總監

在虛擬化、數據保護和數據遷移領域具備15年創新經驗的美國飛康軟件公司&#xff08;FalconStor Software, Inc.&#xff0c;NASDAQ&#xff1a;FALC&#xff09;近日宣布任命張瑾&#xff08;Jimmie Chang&#xff09;先生擔任該公司亞洲區市場部門負責人。 飛康公司近日面向全…

12_登陸案例

13131轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/7044846.html

如何基于FFMPEG和SDL寫一個少于1000行代碼的視頻播放器

http://blog.csdn.net/eplaylity/archive/2008/12/05/3454431.aspx http://www.cnblogs.com/konyel/tag/SDLGuide%E4%B8%AD%E6%96%87%E8%AF%91%E7%89%88/ ffmpeg文檔http://blog.sina.com.cn/s/blog_46dc65a90100a91b.html http://dranger.com/ffmpeg/ffmpeg.html VLC核心功能部…

Flask 概述

什么是Web Framework&#xff1f; Web Application Framework&#xff08;Web應用程序框架&#xff09;或簡單的Web Framework&#xff08;Web框架&#xff09;表示一個庫和模塊的集合&#xff0c;使Web應用程序開發人員能夠編寫應用程序&#xff0c;而不必擔心協議&#xff0…

(五)Maven中的聚合和繼承

一、為什么要聚合&#xff1f; 定義&#xff1a;我們在開發過程中&#xff0c;創建了2個以上的模塊&#xff0c;每個模塊都是一個獨立的maven project&#xff0c;在開始的時候我們可以獨立的編譯和測試運行每個模塊&#xff0c;但是隨著項目的不斷變大和復雜化&#xff0c;我們…

python堆棧反向輸出列表_python - IPython:將Python腳本的輸出重定向到文件(如bash) - 堆棧內存溢出...

IPython有自己的上下文管理器來捕獲stdout / err &#xff0c;但它沒有重定向到文件&#xff0c;它重定向到一個對象&#xff1a;from IPython.utils import iowith io.capture_output() as captured:%run my_script.pyprint captured.stdout # prints stdout from your script…

關于datagrid

基本在公司使用的datagrid不需要自己寫前臺代碼&#xff0c;只需要自己給grid明確id&#xff0c;url以及列屬性即可。 后臺需要返回一個數據類型&#xff1a;{recordsFiltered2, data[], drawnull, recordsTotal2}&#xff0c;通常返回這個數據類型的話&#xff0c;只需要調用d…

M-JPEG、MPEG4、H.264都有何區別 依維安防論壇

壓縮方式是網絡視頻服務器和網絡攝像機的核心技術&#xff0c;壓縮方式很大程度上決定著圖像的質量、壓縮比、傳輸效率、傳輸速度等性能&#xff0c;它是評價網絡視頻服務器和網絡攝像機性能優劣的重要一環。 隨著多媒體技術的發展&#xff0c;相繼推出了許多壓縮編碼標準&…

Django/Flask/Tornado三大web框架性能分析

寫在前面&#xff1a;本文的數據涉及到之前遇到過的問題&#xff0c;大概一次 http 請求到收到響應需要多少時間。這個問題在實際工作中與框架有比較大的關系&#xff0c;因此特別就框架的性能做了一次分析。這里使用之前的一個報告數據&#xff1a; Pythons Web Framework Ben…

python urllib模塊學習筆記

這個模塊是最基本最常用的&#xff0c;以前看過&#xff0c;總結一下 #coding : utf-8import urlliburl http://cnblogs.com#代理服務器proxies {http:http://127.0.0.1:8087}#使用代理服務器打開r urllib.urlopen(url,proxies proxies)print r.info()print r.getcode()pri…

hibernate基礎工具findBySQL學習

public List<Map<String,Object>> findBySQL(String sql,Map<String,Object> param,int start,int max) {log.debug("finding List by hql");try {       //最后返回map map的key可為別名和數據庫字段SQLQuery querysessionFactory.getCurr…

python處理ini文件_python對ini配置文件處理

>>> cf.read("test.ini") #讀取配置文件[test.ini]>>> cf.sections() #片段名[base, callback]>>> cf.options("callback") #配置…

Python實現自動推本地github博客到遠程倉庫

Python實現自動推本地github博客到遠程倉庫 以前的簡單版本 通過python中的os模塊操作系統命令 詳情可參考:Python實現一行代碼推本地git到遠程倉庫 升級版本 本次加入了監聽文件修改功能 這樣腳本只需在后臺運行,即可檢測到對應的文件夾中的內容是否變化 如果變化,則調用…

H.264/MPEG-4 AVC

維基百科&#xff0c;自由的百科全書跳轉到&#xff1a; 導航, 搜索 跳過字詞轉換說明 漢漢▼▲為了閱讀方便&#xff0c;本文使用全文手工轉換。轉換內容&#xff1a;本文采用電腦和信息技術組全文轉換 [查看] ? [編輯] ? [強制刷新] 以下為本條目單獨的全文轉換&#xff0c…

JavaScript 專題之函數柯里化

JavaScript 專題系列第十三篇&#xff0c;講解函數柯里化以及如何實現一個 curry 函數 定義 維基百科中對柯里化 (Currying) 的定義為&#xff1a; In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes m…