os.path.getmtime() 不返回秒的小数部分
我在CentOS 5.3上编译了Python 2.6.4,发现一个问题:os.path.getmtime()或者os.stat().m_time没有小数部分。根据文档,如果os.stat_float_times()返回True,那么它应该返回一个浮点数。在我的情况下,我确实看到了浮点数,但小数部分是0。
In [3]: os.path.getmtime('/tmp')
Out[3]: 1268339116.0
In [4]: os.stat('/tmp')
Out[4]: posix.stat_result(st_mode=17407, st_ino=508897L, st_dev=29952L, st_nlink=7, st_uid=0, st_gid=0, st_size=4096L, st_atime=1268101696, st_mtime=1268339116, st_ctime=1268339116)
In [5]: os.stat_float_times()
True
In [6]: os.stat('/tmp').st_mtime
Out[6]: 1268339116.0
另外,stat()的输出看起来像是整数,这也很奇怪。在Windows上,我用同样的Python版本可以看到小数部分。我是在Colinux上运行CentOS,这会有影响吗?还是说这是某个Python构建的问题?我找不到关于Colinux的通用问题的相关信息。也许这和Colinux如何配置文件系统有关?那我需要检查些什么呢?
1 个回答
6
这是一个文件系统的限制,而不是Python的问题。Centos系统仍然使用ext3文件系统,它只能提供整数形式的修改时间。你可以通过使用ls
命令来查看这些修改时间。试试这个:
ls -ld --full-time /tmp
在我的ext3 Centos系统上,我得到:
drwxrwxrwt 11 root root 69632 2010-03-11 13:16:30.000000000 -0800 /tmp
在我的ext4 Ubuntu系统上,我得到:
drwxrwxrwt 16 root root 20480 2010-03-11 21:20:02.088188962 +0000 /tmp
这个问题在ext4的维基百科文章中有描述:
改进的时间戳
随着计算机的速度越来越快,以及Linux在关键任务应用中的使用越来越多,基于秒的时间戳的精度已经不够用了。为了解决这个问题,ext4提供了以纳秒为单位的时间戳。此外,扩展时间戳字段的2位被添加到时间戳秒字段的最高有效位上,以将2038年问题的影响推迟额外的204年。