如何用python语言监控文件或目录变化

Python014

如何用python语言监控文件或目录变化,第1张

import os, time

path_to_watch = "."before = dict ([(f, None) for f in os.listdir (path_to_watch)])while 1:

time.sleep (10)

after = dict ([(f, None) for f in os.listdir (path_to_watch)])

added = [f for f in after if not f in before]

removed = [f for f in before if not f in after] if added: print "Added: ", ", ".join (added) if removed: print "Removed: ", ", ".join (removed)

before = after

笨办法是在循环中不断读取目录以及目录中文件的最后修改时间,如果有变更,则说说文件被修改。

这种办法需要不断的循环读取文件信息,这对cpu占用较高,同时也会产生一定的磁盘IO,短时间小范围使用尚可,如果长时间运行在服务器上,或者监控一个包含很多文件的目录则不可取。

办法之二是利用操作系统提供的功能来实现。

比如在Windows中,可以利用Windows API【ReadDirectoryChangesW】来实现。这可以免去大量的磁盘IO。因为文件修改的频率一般不高,可以使用定计时器进行循环,对cup的占用也会少很多。

分享背景:

当项目非常多时随之而来的配置文件也会变得非常多,而且越发的复杂,有时候上线后才知道线上环境的配置文件不对,那么我们如何提前来检测到配置文件有改动了,本文将给你提供一个可以检测的手段。代码如下所示

1.导入包并指定目录

2.初始化配置文件的md5值并入库

3.检测新配置文件的md5值是否变化

4.文件进行md5加密处理

5.遍历指定目录下文件

6.代码运行入口

总结:

我们首先要确定我们要检测的配置文件,然后将它的当前的md5值进行初始化到数据库,当下次发布前我们可以针对性的进行一次检测,发现有变更就会提示出来,这样就可以做到提前知晓变更的配置文件,再人工介入进行重点检查。