
Python监测文件或目录变动
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本教程详细介绍如何使用Python脚本来监控文件和目录的变化情况,包括文件的创建、修改与删除等操作。通过实例讲解了watchdog库的应用方法,帮助开发者实现自动化运维任务。
### Python 监控文件或目录变化
在 IT 领域中,监控文件或目录的变化是一个重要需求,尤其是在需要实时捕捉数据更改、备份关键文件等情况时更为必要。Python 提供了多种方法来实现这一功能,例如使用 `pyinotify` 库监听文件系统事件。下面将详细介绍如何利用 Python 实现对文件或目录的监控,并执行相应的自动化任务。
#### 一、基础知识介绍
在开始之前,我们需要了解几个基础概念:
1. **文件系统事件**:当文件或目录被创建、删除、修改时触发的事件。
2. **事件处理程序**:用于处理特定类型文件系统事件的功能函数或类。
3. **监控工具**:Python 提供的库(如 `pyinotify`)可以帮助我们监听和响应文件系统的变更。
#### 二、环境准备
为了实现文件监控功能,首先需要安装必要的 Python 库。本示例中使用的库包括 `pyinotify` 和 `paramiko`.
1. **安装 pyinotify**
```bash
pip install pyinotify
```
2. **安装 paramiko**
```bash
pip install paramiko
```
`paramiko` 是一个用于 SSH 协议的 Python 实现,这里主要用于远程文件传输。
#### 三、核心代码实现
接下来我们将详细分析给定的部分代码,并解释其工作原理。
##### 1. 导入依赖库
```python
import paramiko, os, sys, datetime, time, MySQLdb
from pyinotify import WatchManager, Notifier, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY
```
这里导入了多个库,包括 `paramiko` 用于远程连接和文件传输、`os` 和 `sys` 用于操作系统相关的操作、`datetime` 和 `time` 处理日期时间信息以及 MySQLdb 进行数据库操作。此外还有 pyinotify 库来监听文件系统事件。
##### 2. 配置参数
```python
GM_path = homeasktao
center_hostname = 192.168.1.100
center_username = root
center_password = 123456
center_port = 63008
```
这些变量定义了监控的目标路径、远程服务器的信息等。
##### 3. 创建日志表
```python
CREATE TABLE `wddel_log.status_sql` (
`ip` varchar(16) NOT NULL COMMENT 机器IP,
`tar_name` varchar(50) NOT NULL COMMENT 备份文件名字,
`md5` varchar(50) NOT NULL COMMENT 备份文件MD5,
`flag` int(2) NOT NULL COMMENT 0:成功; 1:失败,
`error_log` varchar(100) NOT NULL COMMENT 错误日志,
`uptime` datetime NOT NULL COMMENT 更新时间,
KEY `ip` (`ip`),
KEY `uptime` (`uptime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
```
这段 SQL 语句用于创建一个记录监控过程中关键信息的日志表,包括 IP 地址、文件名、MD5 值等。
##### 4. 日志记录函数
```python
def log2db(ip, tar_name, md5, flag, error=0):
try:
# ... (省略部分代码)
except Exception as e:
print(e)
```
此函数用于将监控结果写入数据库。它会检查数据库中是否存在该 IP 的记录,如果不存在,则插入新记录;若存在则更新。
##### 5. 获取本地IP地址
```python
def find_ip():
ip = os.popen(sbinip a | grep global eth0).readlines()[0].split()[1].split()[0]
if 192.168. in ip:
ip = os.popen(sbinip a | grep global eth1).readlines()[0].split()[1].split()[0]
return ip
```
这个函数通过执行系统命令来获取当前机器的 IP 地址。
##### 6. 文件 MD5 计算
```python
def md5sum(file_name):
if os.path.isfile(file_name):
f = open(file_name, rb)
py_ver = sys.version[:3]
if py_ver == 2.4:
import md5 as hashlib
else:
import hashlib
md5 = hashlib.md5(f.read()).hexdigest()
```
此函数用于计算文件的 MD5 值,用于后续的数据校验。
#### 四、整体流程
1. **监听文件系统事件**:使用 `pyinotify` 监听指定路径下的文件系统事件。
2. **事件处理**:当
全部评论 (0)


