Завершение копирования файла? - PullRequest
0 голосов
/ 07 июня 2010

В Linux, как мы можем узнать, завершил ли файл копирование перед его чтением? В Windows возникает ошибка OSE.

Ответы [ 2 ]

1 голос
/ 07 июня 2010

Вы можете использовать механизмы inotify (через pyinotify ), чтобы перехватывать такие события, как CREATE, WRITE, CLOSE, и, основываясь на них, вы можете предположить, закончена ли копия или нет.

Однако, поскольку вы не предоставили никаких сведений о том, что вы пытаетесь сделать, я не могу сказать, подходит ли вам inotify (кстати, inotify специфичен для Linux, поэтому вы не можете использовать его на Windows или других платформах)

1 голос
/ 07 июня 2010

В Linux вы можете открыть файл, пока другой процесс пишет в него, без Python, выдавшего OSError, поэтому в общем случае вы не можете точно знать, закончила ли другая сторона запись в этот файл. Вы можете попробовать несколько хаков:

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

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

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