7

ファイルシステム ツリーをたどる Python 2 プログラムで、各ファイルの完全なナノ秒精度の変更されたタイムスタンプを取得する必要があります。ファイルごとに新しいサブプロセスを生成すると時間がかかるため、Python 自体でこれを実行したいと考えています。

Linux の C ライブラリから、結果のフィールドを調べることで、ナノ秒精度のタイムスタンプを取得できます。例えば:st_mtime_nsecstat

#include <sys/stat.h>
#include <stdio.h>
int main() {
    struct stat stat_result;
    if(!lstat("/", &stat_result)) {
        printf("mtime = %lu.%lu\n", stat_result.st_mtim.tv_sec, stat_result.st_mtim.tv_nsec);
    } else {
        printf("error\n");
        return 1;
    }
}

印刷mtime = 1380667414.213703287(/ナノ秒のタイムスタンプをサポートする ext4 ファイルシステム上にあり、時計は UTC です)。

同様に、 をdate --rfc-3339=ns --reference=/印刷し2013-10-01 22:43:34.213703287+00:00ます。

Python (2.7.3) のものos.path.getmtime(filename)os.lstat(filename).st_mtime、mtime をfloat. ただし、結果は間違っています。

In [1]: import os
In [2]: os.path.getmtime('/') % 1
Out[2]: 0.21370339393615723
In [3]: os.lstat('/').st_mtime % 1
Out[3]: 0.21370339393615723

—おそらく浮動小数点エラーが原因で、最初の 6 桁のみが正しいです。

4

3 に答える 3