2012-01-07 13 views
1

ファイルを開くためのファイル変更時刻()は、ファイルの変更時刻に関する情報を持っていますか?

基本的には、特定の時間以降にファイルが変更または置換されているかどうかを知りたいのですが、変更時間のチェックとファイルのオープンの間にファイルを置き換えた場合は、不正確な情報があります。

どうすれば確認できますか?

ありがとうございました。

UPDATE

@rubayeet:答え(1)のおかげで、私は実際にそのことを考えていませんでした。しかし、...変更時間が変更されたらどうすればいいですか?おそらく、私は再びファイルをリロードします。しかし、その時代が変わるとどうなるでしょうか?ファイルが定期的にタッチされている場合、私はループで永遠に終了する可能性があります!私が本当に望んでいるのは、潜在的な無限ループなしで、開いているファイルハンドルとそれに付随する修正時間を得る方法です。

PSあなたが与えた答えは、ファイルが定期的に変更されないので、私の目的のために実際には十分に十分でした。

UPDATE 2

を通じて以前のアップデートを考える(と少しを試して)私は、ファイルが変更されたかのように単にファイルを開いた時点でファイルの修正時刻を知ることはそれほど使用ではないことを実感あなたが読んでいる間にあなたが読み込んだものに変更されたデータの一部または全部を持つことができるので、ファイル全体を開いて読み込み/処理しなければならないかもしれないかどうかmtimeを(@ rubayeetの答えに従って)古いデータがあります。あなたが使用することになり、単純なmodtimesについては

答えて

1
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" 
+0

ありがとう、更新された質問を参照してください... – DaedalusFall

+0

それは 'modifytime1!= modifytime2:' – DaedalusFall

2

pyinotify

from os.path import getmtime 

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

あなたはコールバック機能のような何かをしたい場合は、Python用のinotifyバインディングをチェックすることができます。

watchmanagerを設定すると、監視対象のディレクトリで変更が発生した場合にイベントループで通知されます。ファイルを開くなどの特定のイベントに登録します(書き込まれている場合はmodtimeが変更されます)。

ファイルへの排他的アクセスに興味があれば、私はfnctl moduleを指していますが、これはfiledescriptorsにいくつかの低レベルとファイルロックメカニズムを持っています。

+0

私はファイルの変更時刻を取得する方法を知っています。それは問題ではありませんでした。そして、inotifyは、重い負荷のもとでの変更についてあなたに伝えることを保証しません。 – DaedalusFall

+0

重い負荷のもとで問題を起こしているinotifyの意味を明確にすることはできますか?または、このステートメントのソースを指しますか?ファイルへの排他ロック/アクセスを除いて、2つのファイル属性チェックの間にファイル変更がないことを確かめる方法はありません!この機能のために 'fnctl.flock'を調べてください。 –

+0

私はこれを読んだ場所を覚えていません。私は試してみようと思っていますが、論理は次のようになりました:inotifyイベントは非同期でキューを持っています。アプリケーションが通知されると、アイテムはキューからポップされます。システムが非常にビジー状態の場合、キューはいっぱいになるので、カーネルはそれ以上キューにメッセージを書き込まない。 – DaedalusFall

関連する問題