Python 监控文件夹 - 查询文件大小列表

0 投票
2 回答
514 浏览
提问于 2025-04-16 02:14

我正在尝试让以下代码监控一个文件夹的变化,并在确认文件大小最近没有增加后,返回文件名(最好是完整路径)作为字符串,这样可以避免我的其他脚本检查不完整的文件。
我在把文件大小计时的函数传递文件名时遇到了困难,因为我把检测到的文件收集成了一个列表。
如果我走错了方向,请随时告诉我,非常感谢任何帮助!

斯图尔特

import os, time

def watch(path_to_watch):
    before = dict ([(f, None) for f in os.listdir (path_to_watch)])
    while watch_active == 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:
            filesizechecker(added)
            return added
        if removed:
            print "Removed: ", ", ".join (removed)
        before = after

def filesizechecker(filepath):
# Checks filesize of input file and 
# returns 1 when file hasn't changed for 3 seconds
    fnow = open(filepath, "rb")
    fthen = 1
    while fnow != fthen:
        time.sleep(3)
        fthen = len(f.read())

watch_active = 1
watch("/home/stewart/Documents")

2 个回答

0

你可以看看 lsof 是怎么工作的。它会列出所有打开的文件。如果你关注的文件(或者你想要的文件)没有被打开,那它被修改的可能性也不大。

你在用Linux,所以你可以随时查看 /proc 文件系统,里面有关于进程和文件的信息。

我不太清楚具体细节,所以这条思路值不值得你花时间去研究,就看你自己了 :)

0

我做了一些进一步的研究,发现pyinotify这个库更符合我的需求。

具体来说,IN_CLOSE_WRITE这个事件代码会在一个应用程序(在我的情况下是文件复制)关闭一个可写的文件时返回。

撰写回答