Python, чтобы проверить, загружается ли статус файла - PullRequest
1 голос
/ 26 сентября 2010

Python 2.6

Мой скрипт должен отслеживать некоторые файлы 1G на FTP, когда он будет изменен или модифицирован, скрипт загрузит его в другое место.Эти имена файлов останутся без изменений, люди сначала будут удалять исходный файл на ftp, а затем загружать более новую версию.Мой сценарий будет проверять метаданные файла, такие как размер файла и дата изменения, чтобы определить, есть ли разница.

Вопрос в том, когда сценарий проверяет метаданные, возможно, новый файл все еще загружается.Как справиться с этой ситуацией?Есть ли какой-либо атрибут файла, указывающий статус загрузки (например, файл заблокирован)?Спасибо.

Ответы [ 2 ]

4 голосов
/ 26 сентября 2010

Нет такого атрибута. Вы не можете получить такой файл, но это зависит от программного обеспечения сервера. Кроме того, флаги доступа к файлу могут быть установлены в одну сторону во время загрузки файла, а затем изменены после завершения загрузки; или неполный файл может иметь измененное имя (например, original_filename.ext.part) - все зависит от серверного программного обеспечения, используемого для загрузки.

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

Боюсь, что в общем случае лучшее, что вы можете сделать, это контролировать размер файла и считать файл полностью загруженным, если его размер некоторое время не меняется. Сделайте этот интервал достаточно большим (порядка минут).

3 голосов
/ 26 сентября 2010

Ваш вопрос опущен, но я постараюсь ответить.

  • Если вы запускаете программу проверки состояния на том же сервере, на котором работает ftp:

1) В зависимости от вашей операционной системы, если вы используете Linux и встроили inotify в свое ядро, вы можете использовать pyinotify для просмотра каталога загрузки - inotify отличается от открытого, изменяемогозакрывайте события и позволяйте асинхронно наблюдать за событиями файловой системы, чтобы вы не опрашивали постоянно.И OSX, и Windows имеют схожие, но по-разному реализованные средства.

2) Вы можете с помощью Python tail -f посмотреть, когда новый файл будет помещен на сервер (если вы даже регистрируете это) и просто обновлять, когда вы видите соответствующие сообщения об обновлениях.

  • Если вы запускаете вашу программу удаленно

3) Если ваша утилита проверки статуса должна запускаться на удаленном хосте с FTP-сервера, вам придетсяопросите файл на предмет состояния и добавьте некоторую логику, чтобы обнаружить изменения размера.Для этого вы можете использовать команду FTP «SIZE» для легко разбираемой строки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...