天天看點

python3檔案夾監控子產品watchdog學習

網上搜尋python的檔案夾監控,windows下推薦的大多數都是watchdog,萌新的我就學習了下這個子產品。

這子產品看了很久的git,沒看懂,後來把git的示範代碼拉在電腦上跑了一次就懂了,是以對于看不懂各個文章寫的介紹的,建議先把git上官方舉例代碼拉下來跑一次。

先安裝watchdog,watchdog主要使用三個角色:
           

1、Observer

可以通過以下指令導入:

from watchdog.observers import Observer
           

這個子產品的作用主要是當作啟動和關閉監控程式的,給予檔案夾路徑後,Observer會監控檔案夾的變化并且回報變化。

2、events

可以通過以下指令導入

from watchdog.events import *
           

這是watchdog的動作子產品,具體作用是根據Observer子產品回報的事件配置設定不一樣的操作動作方法,然後程式再繼承這個方法開始執行所需的代碼。有的萌新會問,為什麼Observer回報了事件還需要events去接收處理,還得再去繼承events多麻煩。具體為啥我也不知道,隻是官方把Observer事件回報的結果傳給events,events進行配置設定的。覺得麻煩的大哥可以自己寫子產品接受Observer結果并處理,萌新的我選擇直接繼承官方events實列,反正效果差不多。

3、監控檔案夾路徑了,這個是需要指明實際路徑位址的,沒啥好解釋

我的測試代碼:

from watchdog.observers import Observer
from watchdog.events import *




a = r"H:\歌曲庫\ACG\影視ACG\加勒比海盜"

class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print("檔案被修改了 %s"%event.src_path)

    def on_created(self, event):
        print("檔案被建立了 %s" % event.src_path)


if __name__ == "__main__":
    path = a
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(1)

    except KeyboardInterrupt:
        observer.stop()
    observer.join()
           

在監控目錄下進行建立檔案夾和删除檔案夾操作結果:

python3檔案夾監控子產品watchdog學習

有沒有仔細看我對events子產品導入的是 所有的類?實際上使用的主要是:

FileSystemEventHandler這個類
           

點開events子產品:

python3檔案夾監控子產品watchdog學習

類有很多個,簡單用不到其他類的可以隻導入這一個就行了 ,這個類官方是咋寫的呢?看下圖:

python3檔案夾監控子產品watchdog學習

你會發現除了 dispatch 下面有内容,這個類的其他方法都是空的

這裡dispatch決定了接收到Observer動作後轉發給那個方法操作,而on_any_event 呢會首先被dispatch調用,之後才會配置設定給其他的方法。這裡的所有方法都是空的,目的就是讓我們自行繼承這個類然後執行我們自己的代碼。由于已經把動作配置設定好了,比如我建立檔案夾,隻會調用create,或者移動檔案夾隻會調用move,是以根據相關動作繼承該方法後在方法裡面寫需要執行的代碼即可實作監控和監控操作。

回過頭看我代碼的執行結果,我隻是在定義目錄路徑的子檔案夾内建立了一個新檔案夾,這裡我繼承了兩個方法,一個是modified更新動作的方法,一個是create建立動作的方法,放我建立一個檔案夾時兩個方法都被調用了,能了解父檔案夾被更新的動作是因為有子檔案夾建立,但是子檔案夾建立後也被調用了一次更新,是以在繼承方法的時候建議自己調試兩次,根據自己需求選擇需要繼承的方法。

經測試,檔案的打開動作都算作更新,比如播放一首歌,點開一次就會列印一條更新記錄,播放完後關閉也算一條更新記錄,更新的權限範圍限制很低。