资讯专栏INFORMATION COLUMN

Python运用watchdog模块监管文档转变

89542767 / 273人阅读

  文中关键给大家介绍1个Python里的控制模块:watchdog模块,它能够实现监管文件信息转变。原文中根据实例阐述了watchdog模块应用,所需的可以了解一下


  假定目前还有一个应用领域,必须对文件目录开展监管,变化时造成系统日志,对新增加文档做些相对应操作。


  例如运用到我们以前的歌曲高潮迭起提取器:若可执行程序下增强了1个音频文件,监控就启用歌曲高潮迭起提取器,全自动获取该音频文件高潮一部分。


  这种监控写起来并不难,但是非常花费时间,有很多状况要了解。但是幸亏我们都是写Python的,有很多车轮子可以用,文中详细介绍的就是这个名叫watchdog的控制模块,它可以帮助我们完成以上基本功能。


  1.提前准备


  开始前,你需要保证Python和pip已成功组装电脑上,假如没有,能够浏览文中:超全Python组装手册开展组装。


  假如你用了Python的目的是为了数据统计分析,能直接组装Anaconda,它自带了Python和pip.


  Windows条件下开启Cmd(逐渐—运作—CMD),ios系统条件下请打开Terminal(command+空格符键入Terminal),即将开始输入指令组装依靠。


  自然,我更建议大家用VSCode在线编辑器,把文中编码Copy下来,在在线编辑器下方终端设备运行指令组装依靠控制模块,多舒适的一件事情啊


  在终端设备键入下列指令组装大家所需的依靠控制模块:


  pip install watchdog

  看到Successfully installed xxx则说明安装成功。


  2.基本使用


  看门狗的使用并不复杂,请认真看以下代码和注释:


  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'.'
  #生成事件处理器对象
  event_handler=LoggingEventHandler()
  #生成监控器对象
  observer=Observer()
  #注册事件处理器,配置监控目录
  observer.schedule(event_handler,path,recursive=True)
  #监控器启动——创建线程
  observer.start()
  #以下代码是为了保持主线程运行
  try:
  while True:
  time.sleep(1)
  except KeyboardInterrupt:
  observer.stop()
  #主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止
  observer.join()

  可以看到代码中有几个关键步骤,


  1.配置各项信息;


  2.生成事件处理器、监控器;


  3.注册事件处理器、配置目录、递归执行(即同时监控子文件夹);


  4:启动。


  其实,看门狗的observer是基于threading.Thread对象的,所以observer很多属性都继承了threading.Thread的属性。


  如果你不带参数地运行该脚本,就是要监控脚本文件所在的文件夹,如果要监控其他文件夹,记得运行时带文件夹的路径参数,如:

  python obserber.py/data/home/ckend/


  我们来试着运行看看:

01.png

  可以看到,我在当前文件夹下做的所有操作都被记录下来了。接下来我们就试试怎么自定义一些操作。


  3.监控文件变化


  如果你不知道怎么提取音乐文件的高潮部分,请看这篇文章:《Python自动提取音乐文件高潮》。


  要实现这样的功能,我们有几种方法,一个是在原来log的处理器上做一些新增修改,比如多增一个函数调用音乐高潮提取器。第二个是重新继承FileSystemEventHandler类,并做相应的修改。这里我们还是要保留log的样式,只是在log的时候顺便提取音乐高潮,因此采用第一个方法。


  看看LoggingEventHandler源代码中的on_created,这就是当文件创建时监控器的操作:


  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)


  我们仅需要继承这个类并对on_created进行修改,就能完成我们想要的功能:


  #Python实用宝典
  #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'.'
  #生成事件处理器对象
  event_handler=extractor()
  #生成监控器对象
  observer=Observer()
  #注册事件处理器
  observer.schedule(event_handler,path,recursive=True)
  #监控器启动——创建线程
  observer.start()
  #以下代码是为了保持主线程运行
  try:
  while True:
  time.sleep(1)
  except KeyboardInterrupt:
  observer.stop()
  #主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止
  observer.join()


  首先声明一个类,继承LoggingEventHandler,然后重载on_created函数,在这个函数中不仅记录文件事件变化,还要对mp3文件做一次音乐高潮提取。最后别忘了,生成事件处理器时要用我们新的类名。


  看看效果,将小永远.mp3复制过来:


  成功监控文件变化并提取到音乐高潮,生成高潮文件。这样,只要你保持这个Python进程不关闭,它就会一直监控这个文件夹,一旦有音乐文件进入,就会自动提取它的音乐高潮,在linux系统下,可以搭配supervisor使用,非常好用。


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128734.html

相关文章

  • 依据Python撰写1个监管CPU的软件系统

      应用电脑工作时,有时不清楚什么软件或过程会占有许多资源,造成开展别的任务后发生减缓、卡屏的现象。因而,智能监控系统资源就会变得至关重要。文中用Python撰写了一台超治好的RunCat监控应用系统软件,所需要的可以了解一下  引言  大家好!我就是木木子,近来好懒了哈太热了.jpg  有空来给大家升级一下啦!今天发布——跟这本文写姊妹篇哈~  应用Mac电脑工作时,有时不清楚什么软件或过程会占...

    89542767 评论0 收藏0
  • 在 Visual Studio Code 中配置 Python Flask 环境

    摘要:更改执行策略可能会产生安全风险,如中的帮助主题所述。如果出现选择环境,我们选择。在中,我们仅保留这一段。在中,我们新建一个文件,名为。到此,我们的环境配置就完成了。 在 Visual Studio Code 中配置 Python Flask 环境 本文由 赤石俊哉 原创编写,您可以在学习交流用途以内自由使用文章。 但是禁止抄袭文章,转载时,请注明来源地址,谢谢。最后更新时间: 20...

    gself 评论0 收藏0
  • 美国金融公司因使用云服务省了数十亿美元

    摘要:美国金融行业监管局有的重要应用目前正运行于亚马逊云端服务上面,其中包括市场监测应用,每年因此节省万美元的费用。穆林斯负责与金融企业达成新的云服务协议。 配图:安全性不再是云服务客户最担心的事情北京时间3月19日消息,路透社今天撰文指出,对于美国金融公司而言,使用共享云服务的益处是显而易见的。市场研究公司IDC预计,得益于云服务,到2019年全球较大几家银行将节省150亿美元的庞大资金,技术基...

    Winer 评论0 收藏0
  • PHP和树莓派开发一个比特币/以太坊交易机器人

    摘要:注目前我已经扩展了机器人以便能够交易以太坊我希望它能够在不必太多关注的情况下做事,而我想到的第一件事就是为什么不创建一个可以自动进行比特币和以太坊的简单交易机器人。在下一个泡沫破裂的时候自动购买比特币。选择比特币以太坊和欧元美元钱包。 我最近得到了Raspberry Pi Zero Wifi,我告诉你这个东西是改变游戏规则的。我之前使用过RasPis,但由于该设备的占地面积小得多,耗电...

    ShowerSun 评论0 收藏0
  • watchdog-framework基于SpringBoot+Shiro+Mybatis等开发的企业

    摘要:介绍基于等开发的企业级管理系统快速开发脚手架,拥有角色用户资源管理同时数据更新时关联的用户相应的权限也会实时更新,并且此项目会进行持续更新升级,欢迎使用,若对你有帮助请点击上方的。 介绍 watchdog-framework基于SpringBoot+Shiro+Mybatis+Mybatis-Plus+HikariCP+Redis+Vue+iView等开发的企业级管理系统快速开发脚手架...

    caiyongji 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<