簡體   English   中英

來自兩個不同目錄的文件的 Python 看門狗

[英]Python watchdog for files from two different directories

我正在嘗試使用 Python 的看門狗模塊監聽文件系統更改。 我想監視來自兩個不同目錄的文件。 對於單個文件的手表,我用PatternMatchingEventHandlerwatchdog.events 我想對多個目錄使用相同的。

代碼:

import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler

class EventHandler(PatternMatchingEventHandler):
    def on_modified(self, event):
        super(EventHandler, self).on_modified(event)
        print event

if __name__ == "__main__":
    dir_name = ["/home/user1/first", "/home/user1/second"]
    observer = Observer()
    patterns = ["/home/user1/first/first.log","/home/user1/second/second.log")]
    for i in xrange(len(dir_name)):
        event_handler = EventHandler(patterns = patterns[i])
        observer.schedule(event_handler, dir_name[i], recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(0.1)
    except KeyboardInterrupt:
        observer.stop()

在上面的代碼中,我嘗試執行多目錄觀察格式並為每個文件創建一個事件處理程序。 它對我不起作用。 有什么我在這里想念的嗎? 有什么方法可以做到這一點??

謝謝。

這里有些錯誤

EventHandler(patterns = patterns[i])

arg patterns是一種列表類型,因此您可以像這樣使用

patterns = [["/home/user1/first/first.log"], ["/home/user1/second/second.log"]]
EventHandler(patterns = patterns[i])

雖然它不使用看門狗庫,但如果您想檢查哪些文件可以使用任何變量附加它們並將它們存儲在數組中,這將是檢查是否添加或刪除了特定類型的文件的簡單方法。

    import os
    import fnmatch
    import threading
    import time
    
    initial_count = 0
    flag = 0
    files = []
    
    path = ["/home/kirti/workspace/pythonproject6/img", "/home/kirti/workspace/pythonproject6/copy"]
    
    
    def taskcount(path, flag, initial_count):
        while 1:
            time.sleep(3)
            new_count = len(fnmatch.filter(os.listdir(path), "*.jpg"))
    
            if new_count > initial_count:
    
                if flag != 0:
                    print("Added \nCount :", new_count, "=", path)
                else:
                    print(new_count)
            if new_count < initial_count:
                print("Removed \nCount :", new_count, "=", path)
    
            initial_count = new_count
            flag = 1
    
    
    for j in range(len(path)):
        t = threading.Thread(target=taskcount, args=(path[j], flag, initial_count))
    
        t.start() 

我正在使用 python3,LINUX 操作系統

通過上面建議的小修改和 myside 的一些補充,現在可以使用了

import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler

class EventHandler(PatternMatchingEventHandler):
        def on_modified(self, event):
                super(EventHandler, self).on_modified(event)
                print(event)

if __name__ == "__main__":
        dir_name = ["/home/don/test1", "/home/don/test2"]
        observer = Observer()
        threads=[]
        patterns = [['*.log'],['*.ok']]
        for i in range(len(dir_name)):
                event_handler = EventHandler(patterns = patterns[i],ignore_directories=True,case_sensitive=False)
                observer.schedule(event_handler, dir_name[i], recursive=True)
                threads.append(observer)
        observer.start()

        try:
                while True:
                        time.sleep(0.1)
        except KeyboardInterrupt:
                observer.stop()
        observer.join()

與我的相比,您在 EOF 缺少observer.join() 試試看。

編輯

試試下面的代碼:

import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler

class EventHandler(PatternMatchingEventHandler):
    def on_modified(self, event):
        super(EventHandler, self).on_modified(event)
        print event

if __name__ == "__main__":
    observer = Observer()
    patterns = ["/home/user1/first/first.log","/home/user1/second/second.log"]
    for pattern in patterns:
        event_handler = EventHandler(patterns=pattern)
        observer.schedule(event_handler, dir_name[i], recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(0.1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM