首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确比较ctime?

如何正确比较ctime?
EN

Stack Overflow用户
提问于 2019-08-13 01:23:22
回答 1查看 30关注 0票数 0

我有一个程序,可以获取目录和文件的修改日期/时间。然后,我想获取30秒前的日期/时间,并将其与修改后的日期/时间进行比较。

如果修改时间小于30秒,我想触发一个警报。即使修改时间超过30秒,我的代码也会触发警报。

有没有办法,如果修改发生在30秒内,我才能触发警报?

代码语言:javascript
复制
import os.path
import time, stat
import sys

share_dir = 'C:/mydir'
source_dir  = r'' + share_dir + '/'

def trigger():
    print("Triggered")

def check_dir():
    while True:
        for currentdir, dirs, files in os.walk(source_dir):
            for file in files:
                currentfile = os.path.join(currentdir, file)

                # get modified time for files
                ftime = os.stat(currentfile )[stat.ST_MTIME]
                past = time.time() - 30  # last 30 seconds
                if time.ctime(ftime) >= time.ctime(past):
                    print(time.ctime(ftime) + " > " + time.ctime(past))
                    print("Found modification in last 30 seconds for file =>", currentfile, time.ctime(ftime))
                    trigger()
                    sys.exit()
                else:
                    print('No recent modifications.' + currentfile)
            for folder in dirs:
                currentfolder = os.path.join(currentdir, folder)

                # get modified time for directories
                dtime = os.stat(currentfolder)[stat.ST_MTIME]
                past = time.time() - 30  # last 30 seconds
                if time.ctime(dtime) >= time.ctime(past):
                    print(time.ctime(dtime) + " > " + time.ctime(past))
                    print("Found modification in last 30 seconds for folder =>", currentfolder, time.ctime(dtime))            
                    trigger()
                    sys.exit()
                else:
                    print('No recent modifications: ' + currentfolder)
        time.sleep(4)

if __name__ == "__main__":
    check_dir()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-13 01:43:36

我是在一个大规模的文件系统上这样做的。我个人使用SQLite3并对文件的mtime进行循环(我使用任何其他类型的操作都会发生奇怪的事情,而且更加一致)。

我也不确定为什么你不做一个纯粹的数学解决方案。取当前时间,取文件的mtime,找出它们之间的差异,如果它小于或等于30,就会得到匹配。

我重做了一些代码。我推荐你试试这个:

代码语言:javascript
复制
import os.path
import time, stat
import sys 

def trigger():
    print("Triggered")

def check_dir(source_dir):
    for currentdir, dirs, files in os.walk(source_dir):
        for file in files:
            currentfile = os.path.join(currentdir, file)

            # get modified time for files
            ftime = os.path.getmtime(currentfile)
            if time.time() - ftime <= 30: 
                print("Found modification in last 30 seconds for file =>", currentfile, time.ctime(ftime))
                trigger()
                exit(0)

            else:
                print('No recent modifications.' + currentfile)

        for folder in dirs:
            currentfolder = os.path.join(currentdir, folder)

            # get modified time for directories
            dtime = os.stat(currentfolder)[stat.ST_MTIME]
            if time.time() - dtime <= 30: 
                print("Found modification in last 30 seconds for folder =>", currentfolder, time.ctime(dtime))
                trigger()
                exit(0)

            else:
                print('No recent modifications: ' + currentfolder)

if __name__ == "__main__":
    check_dir('yourdirectoryhere')

在我自己的系统上做了一些轻量级的测试,它似乎工作得很好。可能想要添加回while循环,但它应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57465586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档