小编bin*_*ogs的帖子

使用Python看门狗生成多个观察者

我目前有一个基本功能脚本,它监视单个目录和下面所有子目录的更改,并将输出传递给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()
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到一个错误,表明观察者没有属性'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
Run Code Online (Sandbox Code Playgroud)

这将返回三个ObservedWatch对象,但它们都具有相同的详细信息:

[<Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>, <Observer(Thread-1, started daemon 1548)>]
Run Code Online (Sandbox Code Playgroud)

仍然看起来完全错误,任何更多的帮助将是伟大的.我正在努力抓住这个概念.

附加2:

我继续讨论代码,我现在有一些看似有用的东西:

event_handler = …
Run Code Online (Sandbox Code Playgroud)

python class watchdog

12
推荐指数
3
解决办法
6209
查看次数

标签 统计

class ×1

python ×1

watchdog ×1