1

Python のウォッチドッグ モジュールを使用して、ファイル システムの変更をリッスンしようとしています。2 つの異なるディレクトリからファイルを監視したいと考えています。単一のファイル ウォッチの場合は、PatternMatchingEventHandlerfromを使用しましwatchdog.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()

上記のコードでは、複数のディレクトリ監視形式を実行し、各ファイルのイベント ハンドラーを作成しようとしました。それは私のために働いていません。ここに欠けているものはありますか?? これを行う方法は何ですか??

ありがとう。

4

4 に答える 4

0

ウォッチドッグ ライブラリは使用しませんが、任意の変数を使用してそれらを追加し、それらを配列に格納できるファイルを確認したい場合、これは特定の種類のファイルが追加または削除されたかどうかを確認する簡単な方法です。

    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() 
于 2020-10-26T21:52:18.417 に答える