Как запустить скрипт python всякий раз, когда файл создается в каталоге?

Итак, я пытаюсь сделать это, несколько, простую задачу, но я еще не успел. Я надеюсь, что изменения будут изменены.

Цель:

Запустить /var/www/lager-scanner/filer/pluk_script.py всякий раз, когда в /var/www/lager-scanner/filer/Nav/FromNav есть новый файл и запустить его как пользователя www-data.

Есть ли кто-то там, как мне сказать, как это сделать?

Все папки в /var/www принадлежат пользователю и группе www-data и имеют 775 разрешения.

1
задан 11 June 2016 в 09:34

1 ответ

Ниже приведена приведенная ниже версия примера с страницы inotify на PyPI (https://pypi.python.org/pypi/inotify), чтобы вы начали:

import inotify.adapters
import os

notifier = inotify.adapters.Inotify()
notifier.add_watch('/home/student')

for event in notifier.event_gen():
    if event is not None:
        # print event      # uncomment to see all events generated
        if 'IN_CREATE' in event[1]:
             print "file '{0}' created in '{1}'".format(event[3], event[2])
             os.system("your_python_script_here.py")

Он создает объект Inotify, а затем добавляет каталог для просмотра с использованием метода add_watch (). Затем он создает генератор событий из объекта Inotify, используя метод event_gen (). Наконец, он перебирает этот генератор

. Теперь операции с файлами, которые влияют на наблюдаемый каталог, будут генерировать одно или несколько событий. Каждое событие принимает форму кортежа с четырьмя значениями:

An _INOTIFY_EVENT tuple (опущен на выходе ниже для ясности) Список строк, описывающих события Имя затронутого каталога Имя файла, затронутого

Выполнение приведенного выше примера с первым недопустимым оператором печати, а затем создание файла «новый» в просмотренном каталоге дает следующий результат:

( (...), ['IN_CREATE'], '/home/student', 'new') file 'new' created in '/home/student' ( (...), ['IN_ISDIR', 'IN_OPEN'], '/home/student', '') ( (...), ['IN_ISDIR', 'IN_CLOSE_NOWRITE'/home/student', '') ( (...), ['IN_OPEN'], '/home/student', 'new') ( (...), ['IN_ATTRIB'], '/home/student', 'new') ( (...), ['IN_CLOSE_WRITE'], '/home/student', 'new')

Поскольку происходит событие «IN_CREATE» когда создается новый файл, вы должны добавить код, который вы хотите запустить.

0
ответ дан 23 May 2018 в 10:09
  • 1
    os.system действительно, действительно старомодный, устаревший и больше не должен использоваться. – Jacob Vlijm 11 June 2016 в 09:37

Другие вопросы по тегам:

Похожие вопросы: