os.path.getmtime()不返回几分之一秒
收藏

我为CentOS5.3编译了Python2.6.4,发现这个问题os.path.getmtime()或os.stat().m_time没有小数部分。根据文档,如果os.stat_float_times()返回true,那么它应该返回float值。在我的例子中,我确实把它看作是浮点数,但是没有分数部分(它是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()输出看起来像一个int。在windows上,我确实看到了与python版本相同的一小部分。我在colinux上运行centos,这可能是一个角色,还是python构建的问题?我找不到任何关于普通大肠杆菌问题的线索。可能是colinux如何配置文件系统?在那种情况下我需要检查什么?


最佳答案:

这是一个文件系统限制,而不是python限制。centos仍然在ext3上,它提供整数mtimes。如果使用ls显示mtimes,则可以看到这一点。尝试

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 Wikipedia article中有描述:
改进的时间戳
随着计算机的总体速度越来越快,以及linux越来越多地用于任务关键型应用程序,基于秒的时间戳的粒度变得不足。为了解决这个问题,ext4提供了以纳秒为单位的时间戳。此外,将扩展的时间戳字段的2位添加到时间戳的秒字段的最有效位,以将2038年问题再推迟204年。

公众号