Python Watch Folder - 查询文件大小的列表

时间:2010-08-03 13:44:51

标签: python linux

我正在尝试使用以下代码来查看更改文件夹,并在检查文件大小最近没有增加时将文件名(最好是完整路径)作为字符串返回,以停止其余的脚本检查不完整的文件。 我在将文件大小定时器函数发送到文件名时遇到了困难,因为我正在将检测到的文件作为列表收集。 如果我正在吠叫错误的树,请随时告诉我,并感谢您的帮助!

斯图尔特

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 :(得分:0)

您还可以查看lsof的工作原理。它列出了打开的文件。如果您正在观看(或想要)的文件未打开,则它也不可能被更改。

您使用的是Linux,因此您可以随时查看/ proc文件系统以获取有关进程和文件的信息。

我不知道细节,所以天气好,你觉得这个想法值得花时间:)

答案 1 :(得分:0)

我做了一些研究,发现pyinotify库更适合我的需要。

具体而言,IN_CLOSE_WRITE事件代码在应用程序(在我的情况下,文件副本)关闭可写文件时返回。