2021年第一个没用的python脚本

1. 脚本需求

轮询某个目录下的所有文件,包括子目录中的文件,计算文件修改时间距离现在有多长时间

2. 脚本

#!/usr/bin/env python3
#coding:utf-8

#################################
#检查文件修改时间,然后更新到对端
#author:zhanghao
#time:20210101
#################################

import os
import logging
import sys
import subprocess
import datetime

def logger(obj):
    
    '''
    提供日志文件
    '''
    
    logger = logging.getLogger(obj)
    logger.setLevel(logging.INFO)

    log_file_dir = os.getcwd()
    log_file_name = sys.argv[0].split(".")[0] + '.log'

    st_handler = logging.StreamHandler()
    fl_handler = logging.FileHandler(
            filename = os.path.join(log_file_dir, log_file_name),
            mode = 'a',
            encoding = "utf-8")
    
    st_formatter = logging.Formatter("%(message)s")
    fl_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s: %(message)s")
    
    fl_handler.setLevel(logging.INFO)

    st_handler.setFormatter(st_formatter)
    fl_handler.setFormatter(fl_formatter)

#    logger.addHandler(st_handler)
    logger.addHandler(fl_handler)

    return logger

#logger(sys.argv[0]).info("this is test")

def command(cmd):

    '''
    执行shell命令
    '''

    sub = subprocess.Popen(
            cmd, 
            shell=True, 
            close_fds=True, 
            stdout=subprocess.PIPE, 
            stderr = subprocess.PIPE)
    data, error = sub.communicate()
    
    if sub.returncode != 0:
        logger(sys.argv[0]).error("执行{}命令报错,报错信息如下\n {}".format(cmd, error))
        
    logger(sys.argv[0]).info("执行{}命令成功, 输出如下:\n {}".format(cmd, data))
    return data

def scan_file(dir_path):
    
    '''
    监控文件的修改时间
    '''
    
    file_diff_time = {}

    for root, dirs, files in os.walk(dir_path):
        for filename in files:

            time_stamp = os.lstat(os.path.join(root, filename)).st_mtime
            time_array = datetime.datetime.fromtimestamp(time_stamp).strftime("%Y-%m-%d %H:%M:%S.%f")
    
            now_time = datetime.datetime.now()
            modify_time = datetime.datetime.strptime(time_array,  "%Y-%m-%d %H:%M:%S.%f")
            diff_time = (now_time - modify_time)
            
            days = diff_time.days
            hours = diff_time.seconds // 3600
            minutes = (diff_time.seconds % 3600) // 60

            file_diff_time[filename] = [ days, hours, minutes ]
            # logger(sys.argv[0]).info("{}: 修改时间为 [{}] 距离今天有[{}天{}时{}分]".format(os.path.join(root, filename), modify_time, days, hours, minutes))
            print("{}: 修改时间为 [{}] 距离今天有[{}天{}时{}分]".format(os.path.join(root, filename), modify_time, days, hours, minutes))
    logger(sys.argv[0]).info("轮询{}下面修改文件时间: \n {}".format(dir_path, file_diff_time))
    return file_diff_time 

result = scan_file("/etc/")

3. 输出

3.1 屏幕输出

在这里插入图片描述

3.2 日志输出

在这里插入图片描述

4. bug

logger函数有问题,会循环多次,导致一个文件打印多个info的log记录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值