Возьмите следующий демонстрационный код (из ответа GIO на этот вопрос), который использует GIO FileMonitor для отслеживания изменений в каталоге:
import gio
def directory_changed(monitor, file1, file2, evt_type):
print "Changed:", file1, file2, evt_type
gfile = gio.File(".")
monitor = gfile.monitor_directory(gio.FILE_MONITOR_NONE, None)
monitor.connect("changed", directory_changed)
import glib
ml = glib.MainLoop()
ml.run()
После запуска этого кода я могу создавать и изменять дочерние узлы и получать уведомления об изменениях.Тем не менее, это работает только для непосредственных детей (я знаю, что документы не говорят иначе).Последняя из следующих команд оболочки не приведет к уведомлению:
touch one
mkdir two
touch two/three
Есть ли простой способ сделать его рекурсивным?Я бы предпочел не кодировать вручную что-то, что ищет создание каталогов и добавляет монитор, удаляя их при удалении и т. Д.
Предполагается использовать расширение браузера файлов VCS, чтобы иметь возможность кэшировать состоянияфайлы в рабочей копии и обновлять их индивидуально при изменениях.Таким образом, можно отслеживать от десятков до тысяч (или более) каталогов.Я хотел бы просто найти корень рабочей копии и добавить туда файловый монитор.
Я знаю о pyinotify , но я избегаю его, чтобы это работало подЯдра Linux, такие как FreeBSD или ... другие.Насколько мне известно, GIO FileMonitor использует inotify внизу, где это возможно, и я могу понять, не подчеркивая реализацию для поддержания некоторой степени абстракции, но он предложил мне, чтобы это было возможно.
(В случае, если это имеет значение, я изначально разместил это в PyGTK списке рассылки .)