Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 25, 2015 14:24:18

vuln
Зарегистрирован: 2015-08-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг файлов

всем привет
задача такая, есть папка где время от времени появляется файлы (другая программа или пользователь не важно должен обработать фалы скажем в течении 60 мин ) имена и время появления файлов произвольно
Надо как-то мониторит файлы так чтобы если файл не обработался течение 60 мин то выполним некое действие

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

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

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


PS заранее извиняюсь если задаю глупые вопросы , я в программировании совсем новичок

Отредактировано vuln (Авг. 25, 2015 14:27:44)

Офлайн

#2 Авг. 25, 2015 14:53:21

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

мониторинг файлов

.

Отредактировано J.R. (Фев. 27, 2016 16:51:18)

Офлайн

#3 Авг. 25, 2015 15:33:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

мониторинг файлов

>>> 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}
>>>



Офлайн

#4 Авг. 25, 2015 17:19:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

мониторинг файлов

vuln
Надо как-то мониторит файлы
модуль os.stat позволяет получить время создания файла и время его последней модификации.
модули time или datetime позволяют получить текущее время.
Так что можно ничего не переименовывать.

Из постановки задачи не ясно насколько быстро после окончания интервала 60 минут вы должны обнаружить эту ситуацию? Может можно в конце рабочего дня все подчистить?



Офлайн

#5 Авг. 25, 2015 17:47:36

vuln
Зарегистрирован: 2015-08-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг файлов

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

Отредактировано vuln (Авг. 25, 2015 17:48:25)

Офлайн

#6 Авг. 25, 2015 22:24:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

мониторинг файлов

Все равно непонятно. Отклонение от 60 минут на 1 микросекунду критично?

vuln
(файл может создан и изменен больше часа назад) надо отталкиваться с момента появления файла в каталоге.

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

переимнование - обращение к ОС. Грузит систему, и выполняется не очень быстро.
Я бы воспользовался https://apscheduler.readthedocs.org/en/latest/.
Запланировать одну задачу на постоянную проверку появления файлов (при изменении директории set(glob.glob(*,*)))-oldset. Если они появились запланировать для каждого через час проверку наличия и при необходимости alarm.



Отредактировано doza_and (Авг. 25, 2015 22:38:42)

Офлайн

#7 Авг. 26, 2015 18:03:30

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

мониторинг файлов

inotify

Офлайн

#8 Авг. 27, 2015 11:57:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

мониторинг файлов

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 Но это происходит при сбрасывании буфера на диск. Т.е. временные файлы не будут детектироваться?

Но все это надо?



Отредактировано doza_and (Авг. 27, 2015 12:03:33)

Офлайн

#9 Авг. 27, 2015 20:08:31

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

мониторинг файлов

doza_and
Это не Lunix.
Пропустил видимо.

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

doza_and
Т.е. временные файлы не будут детектироваться?
С короткоживущими файлами не пробовал ее, но судя по докам - да, не будут.

Офлайн

#10 Авг. 28, 2015 15:18:53

vuln
Зарегистрирован: 2015-08-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг файлов

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)

подскажите пожалуйста как правильно в словарь добавить новое пару или удалить

Отредактировано vuln (Авг. 28, 2015 16:16:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version