Python 监控文件夹 - 查询文件大小列表
我正在尝试让以下代码监控一个文件夹的变化,并在确认文件大小最近没有增加后,返回文件名(最好是完整路径)作为字符串,这样可以避免我的其他脚本检查不完整的文件。
我在把文件大小计时的函数传递文件名时遇到了困难,因为我把检测到的文件收集成了一个列表。
如果我走错了方向,请随时告诉我,非常感谢任何帮助!
斯图尔特
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
这个事件代码会在一个应用程序(在我的情况下是文件复制)关闭一个可写的文件时返回。