1

这个问题是我在另一个线程中的问题的延续。由于这个问题的观点略有不同,我想我会把它作为一个新问题发布。

我尝试使用 获取我linux机器ubuntu lucid中某些python文件的访问时间(未被访问。

为了访问文件,我定义了一个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.txt有 last_access=1341460126.0 而不是预期的1341471195.88

知道为什么会这样吗?

4

1 回答 1

1

Ubuntu lucid 默认使用“relatime”挂载文件系统。如果您需要严格的时间,则需要使用“strictatime”(以性能为代价)进行挂载。

于 2012-07-05T07:17:59.277 回答