1

この質問は別のスレッドでの私の質問の続きです。この質問のポイントは少し異なるので、新しい質問として投稿したいと思いました。

私は自分のlinuxマシン(ubuntu lucid)内のいくつかのファイルのアクセス時間を取得することを実験しましpythonた。アイデアは、特定のディレクトリ内のファイルを調べ、過去2分間にアクセスされたかどうかを確認し、それらのファイルのみを印刷する機能を持つことです。アクセスされていません。

ファイルにアクセスするために、readfile()メソッドを定義しました

def readfile(fname):
    with open(fname) as f:
        ct = f.read()
        print 'read file at:',time.time()
        print 'length of file:',len(ct)

便宜上、いくつかのファイル名を定義しました

f1='/home/me/dev/misc/usedfiles/one.txt'
f2='/home/me/dev/misc/usedfiles/two.txt'
f3='/home/me/dev/misc/usedfiles/three.txt'
f4='/home/me/dev/misc/usedfiles/four.txt'

呼び出しreadfile(f1)がファイルにアクセスするようにone.txt

ディレクトリを調べて、過去2分間にアクセスされなかったファイルを印刷する別の関数を定義しました

def files_not_accessed():
    dirname = '/home/me/dev/misc/usedfiles'
    filenames = os.listdir(dirname)
    filenames = [os.path.join(dirname,filename) for filename in filenames]
    for filename in filenames:
        try:
            last_access = os.stat(filename).st_atime #secs since epoch
        except IOError:
            print 'could not get info about %s' % filename
        else:
            timediff =  time.time()-last_access
            print filename,'  last_access=',last_access
            print filename,'  timediff=',timediff
            if timediff > 2*60:
                print filename,'---older than 2 mts'
        print ''

最初に関数を実行するfiles_not_accessed()と、次の出力が得られました

/home/me/dev/misc/usedfiles/two.txt   last_access= 1341459500.0
/home/me/dev/misc/usedfiles/two.txt   timediff= 11668.9905779
/home/me/dev/misc/usedfiles/two.txt ---older than 2 mts

/home/me/dev/misc/usedfiles/one.txt   last_access= 1341460126.0
/home/me/dev/misc/usedfiles/one.txt   timediff= 11042.990674
/home/me/dev/misc/usedfiles/one.txt ---older than 2 mts

/home/me/dev/misc/usedfiles/three.txt   last_access= 1341459504.0
/home/me/dev/misc/usedfiles/three.txt   timediff= 11664.99072
/home/me/dev/misc/usedfiles/three.txt ---older than 2 mts

/home/me/dev/misc/usedfiles/four.txt   last_access= 1341459510.0
/home/me/dev/misc/usedfiles/four.txt   timediff= 11658.990757
/home/me/dev/misc/usedfiles/four.txt ---older than 2 mts

ここでreadfile(f1)、ファイルを読み取る関数を実行しましたone.txt

read file at: 1341471195.88
length of file: 47293

関数の出力からわかるようfiles_not_accessed()に、ファイルone.txtは最後に1341460126.0でアクセスされ、現在は1341471195.88で再度読み取られています。readfile(f1)

そして(すぐに)files_not_accessed()関数を実行し、one.txt最近アクセスされたためファイルが出力されないことを期待しました。last_access時間は1341471195.88であると期待しました。

不思議なことに、私は再び前の出力を取得しています

/home/me/dev/misc/usedfiles/two.txt   last_access= 1341459500.0
/home/me/dev/misc/usedfiles/two.txt   timediff= 11715.1272521
/home/me/dev/misc/usedfiles/two.txt ---older than 2 mts

/home/me/dev/misc/usedfiles/one.txt   last_access= 1341460126.0
/home/me/dev/misc/usedfiles/one.txt   timediff= 11089.1273479
/home/me/dev/misc/usedfiles/one.txt ---older than 2 mts

/home/me/dev/misc/usedfiles/three.txt   last_access= 1341459504.0
/home/me/dev/misc/usedfiles/three.txt   timediff= 11711.1273921
/home/me/dev/misc/usedfiles/three.txt ---older than 2 mts

/home/me/dev/misc/usedfiles/four.txt   last_access= 1341459510.0
/home/me/dev/misc/usedfiles/four.txt   timediff= 11705.1274359
/home/me/dev/misc/usedfiles/four.txt ---older than 2 mts

ファイルに期待値ではなくone.txtlast_access=が含まれている理由がわかりません1341460126.01341471195.88

なぜこれが起こるのか考えていますか?

4

1 に答える 1

1

Ubuntu lucidは、デフォルトで「relatime」を使用してファイルシステムをマウントします。厳密な時間を必要とする場合は、「strictatime」を使用してマウントする必要があります(パフォーマンスを犠牲にして)。

于 2012-07-05T07:17:59.277 に答える