Найти - Пользователи
Полная версия: мониторинг файлов
Начало » Python для новичков » мониторинг файлов
1 2 3
vuln
всем привет
задача такая, есть папка где время от времени появляется файлы (другая программа или пользователь не важно должен обработать фалы скажем в течении 60 мин ) имена и время появления файлов произвольно
Надо как-то мониторит файлы так чтобы если файл не обработался течение 60 мин то выполним некое действие

решение задачи так представляю
1) получаем список файлов в каталоге
2)имена файлов делам переменными
3) каждую минуту еще раз проверяем каталог если файл в каталоге остался то инкриминируем переменную с тем же именем и проверяем если значение равно 60 то “alert”

застрял на втором пункте как список имен преобразовать в переменные

import os
directory = ‘D:\temp’
files = os.listdir(directory)
print (files) // список файлов
//??


PS заранее извиняюсь если задаю глупые вопросы , я в программировании совсем новичок
J.R.
.
py.user.next
>>> files = ['file1.txt', 'file2.txt', 'file3.txt']
>>> 
>>> dct = dict.fromkeys(files, 0)
>>> dct
{'file2.txt': 0, 'file3.txt': 0, 'file1.txt': 0}
>>> dct['file1.txt'] += 1
>>> dct
{'file2.txt': 0, 'file3.txt': 0, 'file1.txt': 1}
>>>
doza_and
vuln
Надо как-то мониторит файлы
модуль os.stat позволяет получить время создания файла и время его последней модификации.
модули time или datetime позволяют получить текущее время.
Так что можно ничего не переименовывать.

Из постановки задачи не ясно насколько быстро после окончания интервала 60 минут вы должны обнаружить эту ситуацию? Может можно в конце рабочего дня все подчистить?
vuln
doza_and
Из постановки задачи не ясно насколько быстро после окончания интервала 60 минут вы должны обнаружить эту ситуацию? Может можно в конце рабочего дня все подчистить?
не атрибуты файлов не катить атрибуты тоже произвольные (файл может создан и изменен больше часа назад) надо отталкиваться с момента появления файла в каталоге.
по окончанию 60 мин значит все (какой то сбой ) , причем надо отслеживать каждый файл отделено
пример: скажем скопировано 10 файлов с интервалом 2 минуты для первого по истечению 60 мин 1 alert, на 62 минуте alert для второго файла.
doza_and
Все равно непонятно. Отклонение от 60 минут на 1 микросекунду критично?
vuln
(файл может создан и изменен больше часа назад) надо отталкиваться с момента появления файла в каталоге.

Директория тоже имеет атрибуты. По ее модификации можно довольно точно определить время появления файла. Если имена произвольные где гарантия что при изменении имени вы не наедете на существующий файл?

переимнование - обращение к ОС. Грузит систему, и выполняется не очень быстро.
Я бы воспользовался https://apscheduler.readthedocs.org/en/latest/.
Запланировать одну задачу на постоянную проверку появления файлов (при изменении директории set(glob.glob(*,*)))-oldset. Если они появились запланировать для каждого через час проверку наличия и при необходимости alarm.
s0rg
inotify
doza_and
vuln
directory = ‘D:\temp’
s0rg
inotify
Это не Lunix.
В винде тоже есть https://msdn.microsoft.com/en-us/library/windows/desktop/aa365261(v=vs.85).aspx
FILE_NOTIFY_CHANGE_LAST_WRITE Но это происходит при сбрасывании буфера на диск. Т.е. временные файлы не будут детектироваться?

Но все это надо?
s0rg
doza_and
Это не Lunix.
Пропустил видимо.

doza_and
В винде тоже есть
Да - есть. Но этот API намного более неудобный.

doza_and
Т.е. временные файлы не будут детектироваться?
С короткоживущими файлами не пробовал ее, но судя по докам - да, не будут.
vuln
import os, time
path_to_watch = "c:\\temp\\"
before = dict ([(f, 0) for f in os.listdir (path_to_watch)])
while 1:
  time.sleep (3)
  after = dict ([(f, 0) for f in os.listdir (path_to_watch)])
  added = [f for f in after if not f in before]
  removed = [f for f in before if not f in after]
  if added: before.update(added)  #добавить  новую пару в словарь (не работает)
  if removed: before.pop(removed)  # удалить   пару из словаря (не работает)
  for x in before:
      before[x] += 1
      if before[x] == 100:
         print ('Alarm!!!!')
  print (before)

подскажите пожалуйста как правильно в словарь добавить новое пару или удалить
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB