我是靠谱客的博主 烂漫百合,最近开发中收集的这篇文章主要介绍python看门狗(watchdog)、多线程、实现文件夹实时监听、日志输出、备份代码展示效果展示,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
python看门狗(watchdog)、多线程、实现文件夹实时监听、日志输出、备份
代码展示
import _thread
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
import shutil
from xml.dom.minidom import parse
import datetime as dt
import os
import logging
# 第一步,创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Log等级总开关
# 第二步,创建一个handler,用于写入日志文件
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
log_path = os.path.dirname(os.getcwd()) + '/dycktozslogs/'
log_name = log_path + rq + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG) # 输出到file的log等级的开关
# 第三步,定义handler的输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
# 第四步,将logger添加到handler里面
logger.addHandler(fh)
class MyDirEventHandler(FileSystemEventHandler):
def on_moved(self, event):
print(event)
def on_created(self, event):
_thread.start_new_thread(copy_remove_file, (event,))
def on_deleted(self, event):
print(event)
def on_modified(self, event):
print("modified:", event)
# 移动、备份报文
def copy_remove_file(event):
time.sleep(6)
try:
# 年
year = dt.datetime.now().strftime('%G')
# 月
month = dt.datetime.now().strftime('%m')
# 日
day = dt.datetime.now().strftime('%d')
# 配置备份目录路径
path ="D:\Backup"
path = os.path.join(path, year)
path = os.path.join(path, month)
path = os.path.join(path, day)
# 判断备份路径是否存在
if os.path.exists(path):
try:
shutil.copy(event.src_path, path)
except shutil.Error:
logger.error("备份文件出错,文件被占用:" + event.src_path)
return
else:
try:
os.makedirs(path)
except Exception:
logger.error("当文件已存在,无法创建该文件:" + path+"--报文路径:"+event.src_path)
finally:
try:
shutil.copy(event.src_path, path)
except shutil.Error:
logger.error("备份文件出错,文件被占用:" + event.src_path)
return
try:
# 将文件移动到部署文凭文件夹
zspath = "D:\test2"
if os.path.exists(zspath):
shutil.move(event.src_path, zspath)
else:
try:
os.makedirs(zspath)
except Exception:
logger.error("当文件已存在,无法创建该文件:" + path+"--报文路径:"+event.src_path)
finally:
shutil.move(event.src_path, zspath)
except shutil.Error:
logger.error("移动文件出错,文件已经存在:" + event.src_path)
return
logger.info("增加文件的文件夹路径:" + event.src_path)
except Exception as err:
logger.error("程序运行报错了:" + event.src_path+",报错内容:"+err)
return
"""
使用watchdog 监控文件的变化
"""
if __name__ == '__main__':
# 创建观察者对象
observer = Observer()
# 创建事件处理对象
fileHandler = MyDirEventHandler()
# 为观察者设置观察对象与处理事件对象
observer.schedule(fileHandler, "D:\test1", True)
observer.start()
try:
while True:
time.sleep(2)
except KeyboardInterrupt:
print("500程序错误,文移动失败。")
pass
observer.join()
效果展示
最后
以上就是烂漫百合为你收集整理的python看门狗(watchdog)、多线程、实现文件夹实时监听、日志输出、备份代码展示效果展示的全部内容,希望文章能够帮你解决python看门狗(watchdog)、多线程、实现文件夹实时监听、日志输出、备份代码展示效果展示所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复