Могу ли я получить время модификации файла из файла, открытого для чтения (python) - PullRequest
1 голос
/ 07 января 2012

Есть ли у файлов, открытых как file("foo.txt") какая-либо информация о времени изменения файла?

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

Как я могу быть уверен?

Спасибо.

UPDATE

@ rubayeet: Спасибо за ответ (+1), я на самом деле не думал об этом. Но ... Что делать, если время модификации изменилось? Возможно, я перезагружаю файл снова. Но что, если это изменит это время? Если к файлу регулярно прикасаться, я могу оказаться в цикле навсегда! Что мне действительно нужно, так это просто получить дескриптор открытого файла и время его изменения без потенциального бесконечного цикла.

PS Ответ, который вы дали, на самом деле был достаточно хорош для моих целей, так как файл не будет регулярно меняться, теперь он меня интересует.

ОБНОВЛЕНИЕ 2

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

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Для простых модов вы должны использовать:

from os.path import getmtime

modtime = getmtime('/file/to/path')

Если вы хотите что-то вроде функциональности обратного вызова, вы можете проверить привязки inotify для python: pyinotify .

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

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

1 голос
/ 07 января 2012
import os
filepath = '/path/to/file'
modifytime1 = os.path.getmtime(filepath)
fp = open(filepath)
modifytime2 = os.path.getmtime(filepath)
if modifytime1 != modifytime2:
    print "File modified after opening"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...