文中關(guān)鍵給大家介紹1個(gè)Python里的控制模塊:watchdog模塊,它能夠?qū)崿F(xiàn)監(jiān)管文件信息轉(zhuǎn)變。原文中根據(jù)實(shí)例闡述了watchdog模塊應(yīng)用,所需的可以了解一下
假定目前還有一個(gè)應(yīng)用領(lǐng)域,必須對(duì)文件目錄開展監(jiān)管,變化時(shí)造成系統(tǒng)日志,對(duì)新增加文檔做些相對(duì)應(yīng)操作。
例如運(yùn)用到我們以前的歌曲高潮迭起提取器:若可執(zhí)行程序下增強(qiáng)了1個(gè)音頻文件,監(jiān)控就啟用歌曲高潮迭起提取器,全自動(dòng)獲取該音頻文件高潮一部分。
這種監(jiān)控寫起來并不難,但是非常花費(fèi)時(shí)間,有很多狀況要了解。但是幸虧我們都是寫Python的,有很多車輪子可以用,文中詳細(xì)介紹的就是這個(gè)名叫watchdog的控制模塊,它可以幫助我們完成以上基本功能。
1.提前準(zhǔn)備
開始前,你需要保證Python和pip已成功組裝電腦上,假如沒有,能夠?yàn)g覽文中:超全Python組裝手冊(cè)開展組裝。
假如你用了Python的目的是為了數(shù)據(jù)統(tǒng)計(jì)分析,能直接組裝Anaconda,它自帶了Python和pip.
Windows條件下開啟Cmd(逐漸—運(yùn)作—CMD),ios系統(tǒng)條件下請(qǐng)打開Terminal(command+空格符鍵入Terminal),即將開始輸入指令組裝依靠。
自然,我更建議大家用VSCode在線編輯器,把文中編碼Copy下來,在在線編輯器下方終端設(shè)備運(yùn)行指令組裝依靠控制模塊,多舒適的一件事情啊
在終端設(shè)備鍵入下列指令組裝大家所需的依靠控制模塊:
pip install watchdog
看到Successfully installed xxx則說明安裝成功。
2.基本使用
看門狗的使用并不復(fù)雜,請(qǐng)認(rèn)真看以下代碼和注釋:
import sys import time import logging from watchdog.observers import Observer from watchdog.events import LoggingEventHandler if __name__=="__main__": logging.basicConfig(level=logging.INFO, format='%(asctime)s-%(message)s', datefmt='%Y-%m-%d%H:%M:%S') path=sys.argv[1]if len(sys.argv)>1 else'.' #生成事件處理器對(duì)象 event_handler=LoggingEventHandler() #生成監(jiān)控器對(duì)象 observer=Observer() #注冊(cè)事件處理器,配置監(jiān)控目錄 observer.schedule(event_handler,path,recursive=True) #監(jiān)控器啟動(dòng)——?jiǎng)?chuàng)建線程 observer.start() #以下代碼是為了保持主線程運(yùn)行 try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() #主線程任務(wù)結(jié)束之后,進(jìn)入阻塞狀態(tài),一直等待其他的子線程執(zhí)行結(jié)束之后,主線程再終止 observer.join()
可以看到代碼中有幾個(gè)關(guān)鍵步驟,
1.配置各項(xiàng)信息;
2.生成事件處理器、監(jiān)控器;
3.注冊(cè)事件處理器、配置目錄、遞歸執(zhí)行(即同時(shí)監(jiān)控子文件夾);
4:啟動(dòng)。
其實(shí),看門狗的observer是基于threading.Thread對(duì)象的,所以observer很多屬性都繼承了threading.Thread的屬性。
如果你不帶參數(shù)地運(yùn)行該腳本,就是要監(jiān)控腳本文件所在的文件夾,如果要監(jiān)控其他文件夾,記得運(yùn)行時(shí)帶文件夾的路徑參數(shù),如:
python obserber.py/data/home/ckend/
我們來試著運(yùn)行看看:
可以看到,我在當(dāng)前文件夾下做的所有操作都被記錄下來了。接下來我們就試試怎么自定義一些操作。
3.監(jiān)控文件變化
如果你不知道怎么提取音樂文件的高潮部分,請(qǐng)看這篇文章:《Python自動(dòng)提取音樂文件高潮》。
要實(shí)現(xiàn)這樣的功能,我們有幾種方法,一個(gè)是在原來log的處理器上做一些新增修改,比如多增一個(gè)函數(shù)調(diào)用音樂高潮提取器。第二個(gè)是重新繼承FileSystemEventHandler類,并做相應(yīng)的修改。這里我們還是要保留log的樣式,只是在log的時(shí)候順便提取音樂高潮,因此采用第一個(gè)方法。
看看LoggingEventHandler源代碼中的on_created,這就是當(dāng)文件創(chuàng)建時(shí)監(jiān)控器的操作:
class LoggingEventHandler(FileSystemEventHandler): """Logs all the events captured.""" #...省略其他源代碼... def on_created(self,event): super(LoggingEventHandler,self).on_created(event) what='directory'if event.is_directory else'file' logging.info("Created%s:%s",what,event.src_path)
我們僅需要繼承這個(gè)類并對(duì)on_created進(jìn)行修改,就能完成我們想要的功能:
#Python實(shí)用寶典 #2019/12/29 import sys import time import logging from watchdog.observers import Observer from watchdog.events import LoggingEventHandler from pychorus import find_and_output_chorus class extractor(LoggingEventHandler): def on_created(self,event): super(LoggingEventHandler,self).on_created(event) what='directory'if event.is_directory else'file' logging.info("Created%s:%s",what,event.src_path) NameExt=event.src_path.split('.') if NameExt[-1]=='mp3': logging.info("mp3文件,提取音樂高潮中...") output_path="."+"".join(NameExt[:-1])+'_high.wav' find_and_output_chorus(event.src_path,output_path,30) if __name__=="__main__": logging.basicConfig(level=logging.INFO, format='%(asctime)s-%(message)s', datefmt='%Y-%m-%d%H:%M:%S') path=sys.argv[1]if len(sys.argv)>1 else'.' #生成事件處理器對(duì)象 event_handler=extractor() #生成監(jiān)控器對(duì)象 observer=Observer() #注冊(cè)事件處理器 observer.schedule(event_handler,path,recursive=True) #監(jiān)控器啟動(dòng)——?jiǎng)?chuàng)建線程 observer.start() #以下代碼是為了保持主線程運(yùn)行 try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() #主線程任務(wù)結(jié)束之后,進(jìn)入阻塞狀態(tài),一直等待其他的子線程執(zhí)行結(jié)束之后,主線程再終止 observer.join()
首先聲明一個(gè)類,繼承LoggingEventHandler,然后重載on_created函數(shù),在這個(gè)函數(shù)中不僅記錄文件事件變化,還要對(duì)mp3文件做一次音樂高潮提取。最后別忘了,生成事件處理器時(shí)要用我們新的類名。
看看效果,將小永遠(yuǎn).mp3復(fù)制過來:
成功監(jiān)控文件變化并提取到音樂高潮,生成高潮文件。這樣,只要你保持這個(gè)Python進(jìn)程不關(guān)閉,它就會(huì)一直監(jiān)控這個(gè)文件夾,一旦有音樂文件進(jìn)入,就會(huì)自動(dòng)提取它的音樂高潮,在linux系統(tǒng)下,可以搭配supervisor使用,非常好用。
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128734.html
應(yīng)用電腦工作時(shí),有時(shí)不清楚什么軟件或過程會(huì)占有許多資源,造成開展別的任務(wù)后發(fā)生減緩、卡屏的現(xiàn)象。因而,智能監(jiān)控系統(tǒng)資源就會(huì)變得至關(guān)重要。文中用Python撰寫了一臺(tái)超治好的RunCat監(jiān)控應(yīng)用系統(tǒng)軟件,所需要的可以了解一下 引言 大家好!我就是木木子,近來好懶了哈太熱了.jpg 有空來給大家升級(jí)一下啦!今天發(fā)布——跟這本文寫姊妹篇哈~ 應(yīng)用Mac電腦工作時(shí),有時(shí)不清楚什么軟件或過程會(huì)占...
摘要:更改執(zhí)行策略可能會(huì)產(chǎn)生安全風(fēng)險(xiǎn),如中的幫助主題所述。如果出現(xiàn)選擇環(huán)境,我們選擇。在中,我們僅保留這一段。在中,我們新建一個(gè)文件,名為。到此,我們的環(huán)境配置就完成了。 在 Visual Studio Code 中配置 Python Flask 環(huán)境 本文由 赤石俊哉 原創(chuàng)編寫,您可以在學(xué)習(xí)交流用途以內(nèi)自由使用文章。 但是禁止抄襲文章,轉(zhuǎn)載時(shí),請(qǐng)注明來源地址,謝謝。最后更新時(shí)間: 20...
摘要:美國金融行業(yè)監(jiān)管局有的重要應(yīng)用目前正運(yùn)行于亞馬遜云端服務(wù)上面,其中包括市場(chǎng)監(jiān)測(cè)應(yīng)用,每年因此節(jié)省萬美元的費(fèi)用。穆林斯負(fù)責(zé)與金融企業(yè)達(dá)成新的云服務(wù)協(xié)議。 配圖:安全性不再是云服務(wù)客戶最擔(dān)心的事情北京時(shí)間3月19日消息,路透社今天撰文指出,對(duì)于美國金融公司而言,使用共享云服務(wù)的益處是顯而易見的。市場(chǎng)研究公司IDC預(yù)計(jì),得益于云服務(wù),到2019年全球較大幾家銀行將節(jié)省150億美元的龐大資金,技術(shù)基...
摘要:注目前我已經(jīng)擴(kuò)展了機(jī)器人以便能夠交易以太坊我希望它能夠在不必太多關(guān)注的情況下做事,而我想到的第一件事就是為什么不創(chuàng)建一個(gè)可以自動(dòng)進(jìn)行比特幣和以太坊的簡單交易機(jī)器人。在下一個(gè)泡沫破裂的時(shí)候自動(dòng)購買比特幣。選擇比特幣以太坊和歐元美元錢包。 我最近得到了Raspberry Pi Zero Wifi,我告訴你這個(gè)東西是改變游戲規(guī)則的。我之前使用過RasPis,但由于該設(shè)備的占地面積小得多,耗電...
摘要:介紹基于等開發(fā)的企業(yè)級(jí)管理系統(tǒng)快速開發(fā)腳手架,擁有角色用戶資源管理同時(shí)數(shù)據(jù)更新時(shí)關(guān)聯(lián)的用戶相應(yīng)的權(quán)限也會(huì)實(shí)時(shí)更新,并且此項(xiàng)目會(huì)進(jìn)行持續(xù)更新升級(jí),歡迎使用,若對(duì)你有幫助請(qǐng)點(diǎn)擊上方的。 介紹 watchdog-framework基于SpringBoot+Shiro+Mybatis+Mybatis-Plus+HikariCP+Redis+Vue+iView等開發(fā)的企業(yè)級(jí)管理系統(tǒng)快速開發(fā)腳手架...
閱讀 928·2023-01-14 11:38
閱讀 902·2023-01-14 11:04
閱讀 759·2023-01-14 10:48
閱讀 2065·2023-01-14 10:34
閱讀 968·2023-01-14 10:24
閱讀 844·2023-01-14 10:18
閱讀 512·2023-01-14 10:09
閱讀 591·2023-01-14 10:02