- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前有一个基本的功能脚本,它监视单个目录和下面的所有子目录的更改并将输出传递给 LoggingEventHandler。
我现在想扩展我的脚本以监控 3 个不同的位置,但我只是无法掌握如何生成多个观察者来观察我指定的每个路径。
我尝试了以下方法:
import time
import thread
import threading
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
event_handler = LoggingEventHandler()
observer = Observer()
paths = ["C:\dir1", "C:\dir2", "C:\dir3"]
for i in paths:
targetPath = str(i)
observer.schedule(event_handler, targetPath, recursive=True)
observer.start_new_thread()
不幸的是,我收到一条错误消息,表明观察者没有属性“start_new_thread”
文档中没有示例显示多个观察者监视一个目录。我没有处理线程的经验,我什至不确定我是否在正确的轨道上。
我应该为每个路径创建一个新的观察者类实例吗?或者是否有某种方法可以为 Observer 类的单个实例提供多个路径?
如果有明显的答案,我们深表歉意。我确信现在这一切都是完全错误的,我太累了,无法理解。
附加:
感谢@FogleBird,我已经纠正了线程启动问题,但我仍然只能使用一个实例,而不是三个单独的观察者观察不同的路径。我修改后的代码现在看起来像:
threads = []
for i in paths:
targetPath = str(i)
observer.schedule(event_handler, targetPath, recursive=True)
threads.append(observer)
observer.start()
print threads
这将返回三个 ObservedWatch 对象,但它们都具有相同的详细信息:
[<Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>]
仍然看起来完全错误,任何更多的帮助都会很棒。我很难理解这个概念。
附加 2:
我继续研究代码,现在我有了一些看起来可以正常工作的东西:
event_handler = LoggingEventHandler()
N2watch = Observer()
threads = []
for i in paths:
targetPath = str(i)
N2watch.schedule(event_handler, targetPath, recursive=True)
threads.append(N2watch)
N2watch.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
N2watch.stop()
N2watch.join()
从我从初始运行中收集到的信息来看,输出似乎在我的列表中指定的所有三个路径名中都出现了变化,但我需要编写一些测试代码来检查。
我仍然不确定这是如何表现的,所以任何进一步的评论都会很好。
干杯。
附加 3:
我将 FogleBird 的答案标记为最佳答案,因为它是唯一的答案,并且确实突出了我初始代码的问题。
我之前的编辑包括用于监控多个位置的完整工作代码,目前看来运行正常。
最佳答案
好问题。该线程较旧,但我在查找确切内容时发现了它,并且我扩展了您的工作并添加了传递包含要监视的目录列表的文件的功能。默认情况下,我不会递归地查看,我将其留给其他人进行测试。希望这可以帮助任何查找相同主题的人。干得好!
使用 python watcher.py
文件名运行。
watcher.py
是我调用的脚本,filename 是包含我的路径的文件名。
我列出了文件中的完整路径,这些路径用换行符分隔。
即:
C:\path1
C:\Path2\subpath1
C:\PATH3
watcher.py
import logging
import sys
import time
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
# Attach a logging event AKA FileSystemEventHandler
event_handler = LoggingEventHandler()
# Create Observer to watch directories
observer = Observer()
# Take in list of paths. If none given, watch CWD
paths = open(sys.argv[1], 'r') if len(sys.argv) > 1 else '.'
# Empty list of observers
observers = []
# Base logging configuration
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
# Iterate through paths and attach observers
for line in paths:
# Convert line into string and strip newline character
targetPath = str(line).rstrip()
# Schedules watching of a given path
observer.schedule(event_handler, targetPath)
# Add observable to list of observers
observers.append(observer)
# Start observer
observer.start()
try:
while True:
# Poll every second
time.sleep(1)
except KeyboardInterrupt:
for o in observers:
o.unschedule_all()
# Stop observer if interrupted
o.stop()
for o in observers:
# Wait until the thread terminates before exit
o.join()
关于python - 使用 Python watchdog 生成多个观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19991033/
我安装了看门狗,但尝试运行任何代码都不起作用。我收到那个错误信息。这是代码片段。有想法该怎么解决这个吗? 最佳答案 嗯,这是使用 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;
我是一名优秀的程序员,十分优秀!