- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python中文件变化监控示例(watchdog)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在python中文件监控主要有两个库,一个是pyinotify ( https://github.com/seb-m/pyinotify/wiki),一个是watchdog(http://pythonhosted.org/watchdog/)。pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装。因为我主要用于Windows平台,所以下面着重介绍watchdog(推荐大家阅读一下watchdog实现源码,有利于深刻的理解其中的原理).
watchdog在不同的平台使用不同的方法进行文件检测。在init.py中发现了如下注释:
1
2
3
4
5
|
|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
|
给出示例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
from
watchdog.observers
import
Observer
from
watchdog.events
import
*
import
time
class
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()
event_handler
=
FileEventHandler()
observer.schedule(event_handler,
"d:/dcm"
,
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://blog.csdn.net/cracker_zhou/article/details/50704640 。
最后此篇关于python中文件变化监控示例(watchdog)的文章就讲到这里了,如果你想了解更多关于python中文件变化监控示例(watchdog)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我安装了看门狗,但尝试运行任何代码都不起作用。我收到那个错误信息。这是代码片段。有想法该怎么解决这个吗? 最佳答案 嗯,这是使用 Python 包时一个非常古老和常见的问题。您将文件命名为 watch
前言 在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要。实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间。 本文将介绍一个名为
在python中文件监控主要有两个库,一个是pyinotify ( https://github.com/seb-m/pyinotify/wiki),一个是watchdog(http://pytho
项目介绍 WatchDog是一个开源(MIT License)、免费、针对ASP.Net Core Web应用程序和API的实时应用监控系统。开发者可以实时记录和查看他们的应用程序中的消息、事件、H
我有一个简单的 Watchdog 和 Queue 进程来监视目录中的文件。 代码取自 https://camcairns.github.io/python/2017/09/06/python_watc
来自Watchdog Quickstart ,我可以看到所有事件,例如修改文件夹、删除文件、创建文件等。但是,我只想查看文件何时创建。我必须更改什么才能只看到创建的文件? import sys imp
我正在使用看门狗来监视目录(和子目录)中创建的文件。如果创建的文件是 .csv,程序将读取它们(并对文件进行一些小的更改,但这实际上不是问题的一部分)。问题是有时 readlines() 返回一个空列
在 Ubuntu 上运行,每次我创建一个文件时,我都会得到一个修改和创建的事件。 这是设计使然还是我做错了什么? 我正在使用事件处理程序类 PatternMatchingEventHandler ev
使用/dev/watchdog 似乎只对监视另一个进程有效,因为在编译内核时没有设置 CONFIG_WATCHDOG_NOWAYOUT 选项,监视/看门狗进程中的崩溃将导致操作系统清理并关闭文件。从而
系统启动过程图: framework层所有的service都是运行在systemserver进程中;systemserver进程是由zygote进程创建。 systemserver进程
版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100。如有错误,欢迎指正。 目录 1、前言 P
我正在运行以下代码,该代码在 Python 中实现 WatchDog 来监视文件更改。我试图跟踪日志文件 (DoNotDelete.txt) 中的所有更改,因此我试图忽略代码中的此 DoNotDele
我无法使用设备/dev/watchdog,因为有东西正在使用它。 echo 1 > /dev/watchdog -> Ressource busy 测试(以 root 身份): ls crw-rw-r
每次修改某个文件时,我都尝试启动一个 python 脚本。准确地说,我在 Raspberry Pi 的串行端口上有一个设备,它将数据写入文本文件 (test.txt)。我已经尝试过这两种工具 - Wa
我正在尝试实现大致如下所示的服务关系: {ACTIVITY} -> {SERVICE1} -> {SERVICE2} ACTIVITY 启动 SERVICE1,然后启动 SERVICE2。 SERVI
我有系统服务。我想为此实现一个看门狗。 就像 [Unit] Description=Watchdog example service [Service] Type=notify Environment
我正在实现一个 ruby 服务器来处理从 GPRS 模块创建的套接字。问题是当模块掉电时,没有迹象表明 socket 已关闭。 我正在做线程来处理同一个服务器的多个套接字。我要问的是:有没有办法在
我不想启用 linux onedrive 服务,因为我注意到它对我的 cpu 来说很吃力,所以我宁愿按需运行它。这就是为什么我试图创建一个小脚本,仅当我访问 OneDrive 目录时才会运行一次 on
我一直在使用 tkinter 组合看门狗模块来处理一些上传请求。大多数时候它工作正常,但有时我们的网络驱动器会不稳定并断开连接一段时间。但是我无法找到捕获此错误的正确位置。 from watchdog
我是这个论坛的新手,想请教专家一个问题。我写了下面的程序(一个更大的东西的一部分,但这是给我带来麻烦的代码) #include #include int main() { int fd;
我是一名优秀的程序员,十分优秀!