Проверьте, изменилось ли содержимое каталога с помощью Shell script или python
У меня есть программа, которая создает файлы в определенном каталоге. Когда эти файлы будут готовы, я запускаю Latex для создания .файл PDF. Итак, мой вопрос, как я могу использовать это изменение каталога, в качестве триггера чтобы вызвать Latex, используя сценарий оболочки или скрипт python?
С Наилучшими Пожеланиями
7 ответов
inotify
заменяет dnotify
.
...dnotify требует открытия одного файлового дескриптора для каждого каталога, который вы собираетесь наблюдать за изменениями...
кроме того, файловый дескриптор закрепляет каталог, запрещая размонтировать резервное устройство, что вызывает проблемы в сценариях со съемными носителями. При использовании inotify, если вы смотрите файл в файловой системе, которая размонтирована, часы автоматически удаляется и появляется событие unmount.
...и еще.
В отличие от своего предка dnotify, inotify не усложняет вашу работу различными ограничениями. Например, при просмотре файлов на съемном носителе эти файлы не блокируются. По сравнению с ним dnotify требует, чтобы сами файлы были открыты и, таким образом, действительно "блокирует" их (препятствует размонтированию пресса.)
Make в системах unix обычно используется для отслеживания по дате, что необходимо перестроить, когда файлы изменились. Обычно я использую довольно хороший makefile для этой работы. Кажется, есть еще один альтернатива вокруг на Google тоже код
вам не только нужно проверить наличие изменений, но и знать, что все изменения завершены перед запуском LaTeX. Например, если вы запустите LaTeX после изменения первого файла и пока еще не внесены дополнительные изменения, вы будете использовать частичные данные, и вам придется перезапустить их позже.
дождитесь завершения первой программы:
#!/bin/bash
first-program &&
run-after-changes-complete
использование && означает, что вторая команда выполняется только в случае успешного завершения первой (нулевой код выхода). Поскольку этот простой скрипт всегда будет запускать вторую команду, даже если первая не изменяет файлы, вы можете включить ее в любую систему сборки, с которой вы уже знакомы, например make.
Python FAM - это интерфейс Python для FAM (Монитор Изменения Файла)
вы также можете посмотреть Pyinotify, который является модулем для мониторинга изменений файловой системы.
сам не очень похож на питона. Но в крайнем случае, предполагая, что вы находитесь в linux, вы можете периодически выкладывать и "LS-lrt /path/to/directory" (получить содержимое каталога и отсортировать по последним изменениям) и сравнивать результаты последних двух вызовов для разницы. Если так, значит, что-то изменилось. Не очень подробно, но работа сделана.
вы можете использовать собственный модуль python hashlib
, который реализует алгоритм MD5:
>>> import hashlib
>>> import os
>>> m = hashlib.md5()
>>> for root, dirs, files in os.walk(path):
for file_read in files:
full_path = os.path.join(root, file_read)
for line in open(full_path).readlines():
m.update(line)
>>> m.digest()
'pQ\x1b\xb9oC\x9bl\xea\xbf\x1d\xda\x16\xfe8\xcf'
вы можете сохранить результат в файл или переменную, и сравнить его с результатом следующего запуска. Это позволит обнаружить изменения в любых файлах, в любом подкаталоге.
это не учитывает изменения разрешений файла; если вам нужно отслеживать эти изменения, а также, это может быть устранено путем добавления строки, представляющей разрешения (доступно через os.stat
для например, атрибуты зависят от вашей системы) к m
переменной.