2013-09-24 1 views
3

Watchdog является довольно удивительным, позволяя вам принимать рекурсивные снимки определенного каталога. Он даже позволяет сравнивать моментальные снимки с помощью функции DirectorySnapshotDiff.Python watchdog: что такое «пустой» снимок каталога?

Моя программа смотрит как справочник, развивается в режиме реального времени и, таким образом, была использована для потребления выходных данных этой функции. Это очень разумно.

Предположим, что я делаю моментальные снимки 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 

Omnomnomnom. Замечательно.

Но при первом запуске моего приложения мне нужно знать текущее состояние. Я хочу сделать вид, что существует нулевое состояние s0, которое переходит в s1; таким образом, я могу разграничить формат. то есть

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

Как это сделать?

Мотивация позади этого: я люблю функциональное программирование. Вместо того, чтобы писать код для использования снимков и различий моментальных снимков (как значительная работа), мне нравится поддерживать высокий уровень использования и минимальный код.

+0

вопрос не выглядит полным? – nneonneo

+0

Простите меня, я попал в enter до окончания =] – fatuhoku

ответ

2

Для версий python> = 2.6 watchdog использует его OrderedSet.

Изменить пути пути fatuhoku следующим образом;

@property 
def paths(self): 
    if sys.version_info >= (2, 6, 0): 
     return watchdog.utils.bricks.OrderedSet() 
    return set() 
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_snapshot и paths, а также метод stat_info, приведенный выше, используются в функции сравнивает. Это работает достаточно хорошо и дает ожидаемые результаты. Ура.