os.path.getmtime()与time.time()结果不一致的原因排查
文件修改时间与预期不符的原因及解决方法
你遇到的问题核心在于操作系统的文件缓存机制:
当你通过Python写入文件时,数据和文件元数据(包括修改时间)不会立刻同步到磁盘,而是先暂存于内存缓存中。操作系统会根据自身调度策略,在合适的时机才将缓存内容刷入磁盘。而os.path.getmtime()读取的是磁盘上实际记录的元数据,并非内存缓存中的最新状态,因此会出现修改时间早于写入前时间的反常情况。
即使with块结束时文件会自动关闭,关闭操作也不保证操作系统立刻完成刷盘,这就导致你读取到的修改时间可能是文件的历史状态。
解决方法
在写入文件后,主动强制刷新缓存到磁盘:
import time import os file = "test.txt" print("before", time.time()) with open(file, "wb") as fh: fh.write(b"12345") fh.flush() # 刷新Python层面的文件缓存到系统缓存 os.fsync(fh.fileno()) # 强制操作系统将缓存同步到磁盘 print("after", time.time()) print("modified", os.path.getmtime(file))
添加这两步后,就能保证修改时间处于before和after的时间区间内,符合你的预期。
内容的提问来源于stack exchange,提问作者Gerry
相关产品推荐
相关产品推荐

