日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何掌握在Python中監(jiān)控文件系統(tǒng)的技術(shù)

本文轉(zhuǎn)載自微信公眾號「Python學(xué)會」,作者Huangwei AI。轉(zhuǎn)載本文請聯(lián)系Python學(xué)會公眾號。

網(wǎng)站設(shè)計、做網(wǎng)站服務(wù)團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準與要求,同時竭誠為客戶提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)公司把每個網(wǎng)站當(dāng)做一個產(chǎn)品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!

看門狗watch dog

通過閱讀本文,您將了解如何檢測對Python應(yīng)用程序中現(xiàn)有文件所做的更改。我們將使用一個維護良好的模塊,叫做看門狗(watchdog)?;诠俜轿臋n,watchdog是一個用于監(jiān)視文件系統(tǒng)事件的Python API庫和shell實用程序。

它同時支持Python 2.7和3.4+。但是,對于舊版本,建議您使用watchdog < 0.10.0。在本教程中,我將只介紹Python API庫。讓我們繼續(xù)下一節(jié),開始安裝必要的模塊。

設(shè)置

設(shè)置是相當(dāng)簡單和直接的pip安裝。在繼續(xù)之前,強烈建議設(shè)置一個虛擬環(huán)境。有兩種方法

安裝在PyPI

在終端中運行如下命令。

 
 
 
  1. pip install watchdog

它將安裝PyPI(在撰寫本文時為0.10.2)的最新版本。

從代碼庫安裝

此外,您可以在本地文件夾中克隆存儲庫并正常安裝它。首先,讓我們使用以下命令克隆它。

 
 
 
  1. git clone --recursive git://github.com/gorakhargosh/watchdog.git

使用以下命令更改工作目錄。確保它在工作目錄中包含一個名為setup.py的文件。

 
 
 
  1. cd watchdog

運行以下命令安裝它。

 
 
 
  1. pip install -e.

直接從存儲庫克隆它的一個主要優(yōu)點是,您可以獲得帶有附加特性的最新版本。

您可以在終端中運行以下命令來驗證安裝是否成功。

 
 
 
  1. pip show watchdog

讓我們繼續(xù)下一節(jié)并開始編寫Python代碼。

實現(xiàn)

watchdog的主要構(gòu)建模塊基于以下類:

  • 觀察者
  • 事件處理程序

因此,實現(xiàn)就像這樣簡單:

  1. 創(chuàng)建一個watchdog.observers的實例。觀察者線程類。
  2. 使用自己的實現(xiàn)定義事件處理程序的子類,并從中創(chuàng)建實例。
  3. 通過附加事件處理程序的觀察者實例調(diào)用調(diào)度函數(shù)。它接受一些其他輸入?yún)?shù),比如要監(jiān)視的目錄的路徑。
  4. 啟動觀察者線程并等待它生成事件,這些事件將觸發(fā)事件處理程序中的代碼。

事件處理程序

當(dāng)前模塊中有4種類型的事件處理程序可用:

  1. FileSystemEventHandler—可以覆蓋其中方法的基本文件系統(tǒng)事件處理程序。
  2. PatternMatchingEventHandler——用與正在發(fā)生的事件相關(guān)的文件路徑匹配給定的模式。
  3. RegexMatchingEventHandler -匹配給定的正則表達式和與發(fā)生事件相關(guān)的文件路徑。
  4. LoggingEventHandler—記錄捕獲的所有事件。

其余的類繼承自FileSystemEventHandler,它提供了以下函數(shù)供我們重寫。

  • on_any_event -捕獲所有事件處理程序。
  • on_created -創(chuàng)建文件或目錄時調(diào)用。
  • on_deleted -當(dāng)文件或目錄被刪除時調(diào)用。
  • on_modified -當(dāng)文件或目錄被修改時調(diào)用。
  • on_moved -當(dāng)文件或目錄被移動或重命名時調(diào)用。

導(dǎo)入

創(chuàng)建一個新的Python文件,并添加以下導(dǎo)入聲明。我把它命名為test.py。

 
 
 
  1. from watchdog.observers import Observer
  2. from watchdog.events import FileSystemEventHandler

FileSystemEventHandler的子類

創(chuàng)建一個繼承自FileSystemEventHandler的新類,并根據(jù)用例相應(yīng)地覆蓋這些函數(shù)。我將把它命名為MyHandler,但你可以隨意命名它。

 
 
 
  1. class MyHandler(FileSystemEventHandler):
  2.     def on_any_event(self, event):
  3.         print(event.event_type, event.src_path)
  4.     def on_created(self, event):
  5.         print("on_created", event.src_path)
  6.     def on_deleted(self, event):
  7.         print("on_deleted", event.src_path)
  8.     def on_modified(self, event):
  9.         print("on_modified", event.src_path)
  10.     def on_moved(self, event):
  11.         print("on_moved", event.src_path)

用實現(xiàn)的邏輯替換print語句。對于每個函數(shù),它都有一個名為event的輸入?yún)?shù),該參數(shù)包含以下變量:

  • event_type—字符串形式的事件類型。默認為沒有。
  • is_directory -如果為目錄觸發(fā)事件,則為True;否則錯誤。
  • src_path—觸發(fā)此事件的文件系統(tǒng)對象的源路徑。

最有用的參數(shù)是src_path,您可以在其中使用它來確定哪個文件被修改,然后再運行相應(yīng)的邏輯。

 
 
 
  1. if(event.src_path == "./path/file.txt"):
  2.     print("Execute your logic here!")

觀察者和事件

一旦你創(chuàng)建了子類,你就可以和觀察者類一起安全地創(chuàng)建它的實例了。為監(jiān)視過程分配您所選擇的路徑。我將檢查一個新創(chuàng)建的名為json的文件夾。您可以根據(jù)自己的喜好修改它。

您也可以設(shè)置recursive遞歸參數(shù),但強烈建議預(yù)先定義層次結(jié)構(gòu)并將其設(shè)置為false,以防止權(quán)限不足或無法訪問子文件夾的問題。

調(diào)用start將運行該線程,當(dāng)您在相應(yīng)的路徑中進行修改時,將生成一個事件。

 
 
 
  1. event_handler = MyHandler()
  2. observer = Observer()
  3. observer.schedule(event_handler, path='./json/', recursive=False)
  4. observer.start()

測試

為了測試它,你必須實現(xiàn)一個正在運行的循環(huán)來防止它退出。退出一個KeyboardInterrupt異常時,調(diào)用stop函數(shù)來清理資源。

 
 
 
  1. while True:
  2.     try:
  3.         pass
  4.     except KeyboardInterrupt:
  5.         observer.stop()

保存Python文件并在終端中運行它。根據(jù)您設(shè)置的名稱修改名稱。

 
 
 
  1. python test.py

您可以通過創(chuàng)建一個新文檔、修改其中的內(nèi)容并從目錄中刪除它來輕松地測試它。下面是輸出的示例:


網(wǎng)站標(biāo)題:如何掌握在Python中監(jiān)控文件系統(tǒng)的技術(shù)
本文鏈接:http://www.dlmjj.cn/article/cdgdjhs.html