2010-03-11 26 views
3

我爲centos 5.3編譯了Python 2.6.4,並發現os.path.getmtime()或os.stat()。m_time沒有有小數部分。根據文檔,如果os.stat_float_times()返回True,那麼它應該返回float值。在我的情況下,我確實認爲它是浮動的,但沒有小數部分(它是0)。os.path.getmtime()不返回秒的分數

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問題的任何命中。可能是colinux如何配置文件系統?在那種情況下我需要檢查什麼?

回答

6

這是一個文件系統的限制,而不是Python的限制。 Centos仍然在ext3上,它提供了整數倍。如果你用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年。

+0

謝謝,這是有道理的。我確認文件系統是ext3,但我實際上並不知道這是一個限制。這些信息對調整程序有幫助,或者可能決定使用ext4。 – haridsv 2010-03-11 21:46:59