Как просмотреть папку на наличие изменений и когда изменения выполняются с помощью Python? - PullRequest
0 голосов
/ 08 марта 2010

мне нужно смотреть папку для входящих файлов. я сделал это с помощью:
Как посмотреть файл на предмет изменений?
проблема в том, что файлы, которые перемещаются, довольно большие (10 ГБ) и я хочу получать уведомления, когда все файлы будут готовы. я пытался сравнивать размер папки каждые 20 секунд, но файл показывает его правильный размер, даже жесткие окна показывают, что он все еще движется Я использую Windows с Python

Я нашел решение, используя open и ожидая исключения io. если файл все еще перемещается, я получаю ошибку 13.

Ответы [ 5 ]

1 голос
/ 09 марта 2010

Вам стоит взглянуть по этой ссылке:

http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html

Здесь вы можете увидеть сравнение метода, о котором вы говорите (простой опрос), с двумя другими технологиями, специфичными для окон, которые, на мой взгляд, предлагают действительно лучшее решение вашей проблемы!

В противном случае, если вы используете Linux, есть iNotify и относительная оболочка Python:

Pyinotify - это чистый модуль Python, используемый для мониторинга событий файловых систем на Платформы Linux через inotify

Здесь: http://trac.dbzteam.org/pyinotify

0 голосов
/ 09 марта 2010

попробуйте проверить последнее изменение времени вместо размера файла во время опроса.

0 голосов
/ 08 марта 2010

Вы можете использовать os.stat() для контроля времени файла. Однако имейте в виду, что при различных условиях работы сети копия может на мгновение зависнуть, поэтому mtime не обновляется в течение нескольких секунд, поэтому вам необходимо это учесть.

Другой вариант - попытаться открыть файл с монопольным чтением / записью, который должен завершиться с ошибкой в ​​Windows, если файл все еще открыт другим процессом

0 голосов
/ 09 марта 2010

Самый надежный способ - написать собственную программу для перемещения файлов.

0 голосов
/ 08 марта 2010

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

...