проверить, завершен ли файл (с питоном) - PullRequest
3 голосов
/ 11 мая 2011

возможно ли проверить, завершен ли копирование файла, завершено ли его использование python?
или даже в командной строке.
Я манипулирую файлами программно в определенной папке на Mac OSX, но мне нужно проверить, завершен ли файл, прежде чем запускать код, который выполняет манипуляции.

Ответы [ 5 ]

3 голосов
/ 11 мая 2011

возьмите md5 файла перед копированием, а затем снова всякий раз, когда вы думаете, что закончили копирование. когда они совпадают, вы готовы идти. для этого используйте md5 из модуля hashlib .

3 голосов
/ 11 мая 2011

В файловой системе Unix / Mac OS X отсутствует понятие «полнота файла».Вы можете попытаться заблокировать файл с помощью flock или, проще, временно скопировать файлы в подкаталог каталога назначения, а затем переместить их, как только они будут полностью скопированы (при условии, что у вас есть контроль надпрограмма, которая делает копирование).Перемещение - это атомарная операция;вы узнаете, что файл полностью скопирован, как только он появится по ожидаемому пути.

2 голосов
/ 11 мая 2011

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

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

1 голос
/ 11 мая 2011

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

0 голосов
/ 11 мая 2011

Вы можете использовать lsof и анализировать список открытых дескрипторов.Если какой-то процесс все еще имеет открытый дескриптор файла (или запись), вы можете найти его там.

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