3

python2.6.4をcentos5.3用にコンパイルしましたが、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の問題のヒットは見つかりませんでした。colinuxがファイルシステムを構成する方法かもしれませんか?その場合、何を確認する必要がありますか?

4

1 に答える 1

6

これは、Pythonの制限ではなく、ファイルシステムの制限です。Centosはまだext3上にあり、整数のmtimesを提供します。mtimesを。で表示すると、これを確認できますls。試す

ls -ld --full-time /tmp

私のext3Centosボックスでは、

drwxrwxrwt 11 root root 69632 2010-03-11 13:16:30.000000000 -0800 /tmp

私のext4Ubuntuボックスでは、

drwxrwxrwt 16 root root 20480 2010-03-11 21:20:02.088188962 +0000 /tmp

これは、ext4Wikipediaの記事で説明されています。

タイムスタンプの改善

コンピュータが一般的に高速になり、Linuxがミッションクリティカルなアプリケーションに使用されるようになると、秒ベースのタイムスタンプの粒度が不十分になります。これを解決するために、ext4はナノ秒単位で測定されたタイムスタンプを提供します。さらに、拡張されたタイムスタンプフィールドの2ビットが、タイムスタンプの秒フィールドの最上位ビットに追加され、2038年問題をさらに204年間延期します。

于 2010-03-11T21:28:41.523 に答える