Python open(file,vr)应该更新atime吗?

Python open(file,vr)应该更新atime吗?,python,linux,file-io,filesystems,Python,Linux,File Io,Filesystems,每当我使用Python打开()文件时,上次访问时间都不会更新,这很奇怪: 如果我用r/rb打开,如果我统计文件,则不会发生任何变化 如果我使用w/r+或a打开,则ctime和mtime会正确更新,但不是atime 这看起来不像是文件系统问题(在本例中是ext3),因为如果我触摸或单击文件,它会正确更新 我没能找到很多关于它的信息;它应该这样做还是有什么问题?请尝试运行mount,并查看是否在挂载的fs上使用了noatime标志。此外,如果内核足够新鲜,那么默认设置的是“relatime” “op

每当我使用
Python
打开()文件时,上次访问时间都不会更新,这很奇怪:

如果我用
r/rb
打开,如果我统计文件,则不会发生任何变化

如果我使用
w/r+
或a打开,则ctime和mtime会正确更新,但不是
atime

这看起来不像是文件系统问题(在本例中是ext3),因为如果我触摸或单击文件,它会正确更新


我没能找到很多关于它的信息;它应该这样做还是有什么问题?

请尝试运行
mount
,并查看是否在挂载的fs上使用了
noatime
标志。此外,如果内核足够新鲜,那么默认设置的是“relatime”

“open()”代码非常简单,不会弄乱ATIME标志:

/* >> fileutils.c from Python 3.2.3 */

FILE*
_Py_fopen(PyObject *path, const char *mode)
{
#ifdef MS_WINDOWS
    wchar_t wmode[10];
    int usize;

    usize = MultiByteToWideChar(CP_ACP, 0, mode, -1, wmode, sizeof(wmode));
    if (usize == 0)
        return NULL;

    return _wfopen(PyUnicode_AS_UNICODE(path), wmode);
#else
    FILE *f;
    PyObject *bytes = PyUnicode_EncodeFSDefault(path);
    if (bytes == NULL)
        return NULL;

    /* >> Plain fopen(), nothing fancy here. */
    f = fopen(PyBytes_AS_STRING(bytes), mode);
    Py_DECREF(bytes);
    return f;
#endif
}

可能文件系统是用
notime
装载的?请注意,您需要实际读取文件以更新
atime
。请检查
noatime
的装载选项。fstab中没有错误,默认装载选项以及正如我所说的,touch或cat将毫无问题地更新atime,我只是想知道open()在现代Linux机器上使用了一种特殊的方式来访问不会更新st_atime字段的文件,“relatime”通常是默认的。有一个选项O_NOATIME打开(2),使用strace来查找python是否在使用它可能是值得的(我会自己做,但你不会说哪个python版本和哪个操作系统)。对于未来的读者,自Linux内核2.6.30以来,relatime默认硬编码到内核中,默认间隔为1天,因此除非使用Stricatime(或noatime)挂载分区,否则它是活动的