3

Watchdog 在让您对特定目录进行递归快照方面非常棒。它甚至可以让您将快照与名为DirectorySnapshotDiff的函数进行比较。

我的程序监视目录实时演变,因此已被用于使用此函数的输出。这是非常合理的。

假设我s1, s2...在任意时间拍摄文件系统的快照。我们将最后一个快照与最新的快照进行比较以创建差异对象。

        d1    d2           # detected differences (my app eats these up)
     s1 -> s2 -> s3        # evolving states (snapshots taken) of the file system.

t=0 -------------------> time

无名无名。那太棒了。

但是,第一次运行我的应用程序时,我需要知道当前状态。我想假装有一个 null 状态s0,它转换为s1; 因此我可以区分格式。IE

     d0                # I want to create this 'bootstrapping' difference set
(s0) -> s1             # Assume s0 is the empty snapshot: it reports everything is an addition

我怎么做?

这背后的动机是:我喜欢函数式编程。与其编写代码来使用快照和快照差异(两者都是相当大的工作),我更喜欢保持高重用和最少代码。

4

2 回答 2

2

对于 python >= 2.6 的版本,看门狗使用 OrderedSet。

修改fatuhoku的paths函数如下;

@property
def paths(self):
    if sys.version_info >= (2, 6, 0):
        return watchdog.utils.bricks.OrderedSet()
    return set()
于 2014-05-19T20:04:41.020 回答
1

我提出了一个解决方案,方法是创建一个模仿 的类watchdog.utils.dirsnapshot.DirectorySnapshot,并在适当的地方返回空值。

class EmptyDirectorySnapshot(object):
    """
    For use as the zeroth snapshot in a chain of DirectorySnapshotDiffs
    """

    @property
    def stat_snapshot(self):
        return {}

    def stat_info(self, path):
        return None

    @property
    def paths(self):
        return set()

和的两个属性stat_snapshotpaths以及stat_info上面给出的方法都用于 diffing 函数。这工作得很好,并产生了预期的结果。欢呼。

于 2013-09-24T16:33:07.593 回答