Как использовать сторожевой таймер

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

EX:

Первый каталог /path/to/first/dir/2017/04/27/nfcapd.20170427 ‹- Новый файл (Обратите внимание, это не текстовый файл)

Сценарий запускается для получения данных в указанном ниже файле с использованием указанного выше имени файла

nfdump - r nfcapd.20170427 > главная/пользователи/rmaestas/nfcapd.20170427.txt

Имя файла сохраняется в переменной для использования с кодом

updated = 'nfcapd.21070427.txt’

filename = ('home/users/rmaestas/') #<-- insert 'updated in directory'
with open(filename, 'r') as infile:    
    next(infile) #Skips the first row, first row is not data.
    for line in infile:#read every line       
        if "Summary:" in line:#End of the data, last4 lines are a summary which won't be needed.
            break
        print(line.split()[4].rsplit(':', 1)[0])

#more code... 

person k5man001    schedule 28.04.2017    source источник


Ответы (1)


Что вам нужно сделать, так это создать класс, который наследует один из обработчиков файлов и переопределить метод on_modified, который будет вызываться при обновлении файла, например

class CustomFileEventHandler(FileSystemHandler):
    def on_modified(self, event):
        file_name = event.src_path #get's the path of the modified file
        with open(file_name, "r") as infile, open("path/to/file.txt", "w") as result:
            #call your function which should return a string
            result.write(function output) #instead of print

Нет необходимости добавлять «home/users/rmaestas», так как .src_path даст вам полный путь к файлу.

Затем с вашим переопределенным FileSystemHandler вам нужно настроить Observer, который фактически будет выполнять мониторинг, аналогичный примеру, приведенному в документации по сторожевому таймеру.

event_handler = CustomFileEventHandler()
observer = Observer()
observer.schedule(event_handler, "path/to/dir", recursive=False)
observer.start()
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()
person Farai Gandiya    schedule 19.06.2017