stat — 解释 stat() 结果

源代码: Lib/stat.py


stat 模块定义了用于解释 os.stat()os.fstat()os.lstat()(如果存在)结果的常量和函数。 有关 stat()fstat()lstat() 调用的完整详细信息,请查阅你系统的文档。

在 3.4 版本中更改: stat 模块由 C 实现支持。

stat 模块定义了以下用于测试特定文件类型的函数

stat.S_ISDIR(mode)

如果 mode 来自目录,则返回非零值。

stat.S_ISCHR(mode)

如果 mode 来自字符特殊设备文件,则返回非零值。

stat.S_ISBLK(mode)

如果 mode 来自块特殊设备文件,则返回非零值。

stat.S_ISREG(mode)

如果 mode 来自普通文件,则返回非零值。

stat.S_ISFIFO(mode)

如果 mode 来自 FIFO(命名管道),则返回非零值。

stat.S_ISLNK(mode)

如果 mode 来自符号链接,则返回非零值。

stat.S_ISSOCK(mode)

如果 mode 来自套接字,则返回非零值。

stat.S_ISDOOR(mode)

如果 mode 来自门,则返回非零值。

3.4 版本中新增。

stat.S_ISPORT(mode)

如果 mode 来自事件端口,则返回非零值。

3.4 版本中新增。

stat.S_ISWHT(mode)

如果 mode 来自白化文件,则返回非零值。

3.4 版本中新增。

定义了两个额外的函数来更通用地操作文件的模式

stat.S_IMODE(mode)

返回文件的 mode 中可由 os.chmod() 设置的部分 — 即文件的权限位,加上粘滞位、设置组 ID 位和设置用户 ID 位(在支持它们的系统上)。

stat.S_IFMT(mode)

返回文件模式中描述文件类型的部分(由上面的 S_IS*() 函数使用)。

通常,你会使用 os.path.is*() 函数来测试文件的类型; 当你对同一文件进行多次测试,并希望避免每次测试都调用 stat() 系统调用的开销时,此处的函数很有用。 当检查 os.path 未处理的文件信息时,例如块设备和字符设备的测试,它们也很有用。

示例

import os, sys
from stat import *

def walktree(top, callback):
    '''recursively descend the directory tree rooted at top,
       calling the callback function for each regular file'''

    for f in os.listdir(top):
        pathname = os.path.join(top, f)
        mode = os.lstat(pathname).st_mode
        if S_ISDIR(mode):
            # It's a directory, recurse into it
            walktree(pathname, callback)
        elif S_ISREG(mode):
            # It's a file, call the callback function
            callback(pathname)
        else:
            # Unknown file type, print a message
            print('Skipping %s' % pathname)

def visitfile(file):
    print('visiting', file)

if __name__ == '__main__':
    walktree(sys.argv[1], visitfile)

提供了一个额外的实用函数来将文件的模式转换为人类可读的字符串

stat.filemode(mode)

将文件的模式转换为 ‘-rwxrwxrwx’ 形式的字符串。

3.3 版本中新增。

在 3.4 版本中更改: 该函数支持 S_IFDOORS_IFPORTS_IFWHT

以下所有变量只是 os.stat()os.fstat()os.lstat() 返回的 10 元组的符号索引。

stat.ST_MODE

Inode 保护模式。

stat.ST_INO

Inode 编号。

stat.ST_DEV

Inode 所在的设备。

指向该 inode 的链接数。

stat.ST_UID

所有者的用户 ID。

stat.ST_GID

所有者的组 ID。

stat.ST_SIZE

普通文件的大小(以字节为单位);某些特殊文件上等待的数据量。

stat.ST_ATIME

上次访问时间。

stat.ST_MTIME

上次修改时间。

stat.ST_CTIME

操作系统报告的 “ctime”。 在某些系统(如 Unix)上,它是上次元数据更改的时间,而在其他系统(如 Windows)上,它是创建时间(有关详细信息,请参阅平台文档)。

“文件大小” 的解释根据文件类型而变化。对于普通文件,这是文件的大小(以字节为单位)。对于大多数 Unix(特别是 Linux)下的 FIFO 和套接字,“大小” 是在调用 os.stat()os.fstat()os.lstat() 时等待读取的字节数; 这有时很有用,尤其是在非阻塞打开后轮询这些特殊文件之一时。其他字符和块设备的大小字段的含义差异较大,具体取决于底层系统调用的实现。

以下变量定义 ST_MODE 字段中使用的标志。

使用上面的函数比使用第一组标志更具可移植性

stat.S_IFSOCK

套接字。

stat.S_IFLNK

符号链接。

stat.S_IFREG

普通文件。

stat.S_IFBLK

块设备。

stat.S_IFDIR

目录。

stat.S_IFCHR

字符设备。

stat.S_IFIFO

FIFO。

stat.S_IFDOOR

门。

3.4 版本中新增。

stat.S_IFPORT

事件端口。

3.4 版本中新增。

stat.S_IFWHT

白化文件。

3.4 版本中新增。

注意

当平台不支持文件类型时,S_IFDOORS_IFPORTS_IFWHT 定义为 0。

以下标志也可用于 os.chmod()mode 参数中

stat.S_ISUID

设置 UID 位。

stat.S_ISGID

设置组 ID 位。 此位有几个特殊用途。对于目录,它表示该目录将使用 BSD 语义:在那里创建的文件从目录继承其组 ID,而不是从创建进程的有效组 ID 继承,并且在那里创建的目录也将设置 S_ISGID 位。对于没有设置组执行位(S_IXGRP)的文件,设置组 ID 位表示强制的文件/记录锁定(另请参见 S_ENFMT)。

stat.S_ISVTX

粘滞位。当在目录上设置此位时,意味着只有文件的所有者、目录的所有者或特权进程才能重命名或删除该目录中的文件。

stat.S_IRWXU

文件所有者权限的掩码。

stat.S_IRUSR

所有者具有读取权限。

stat.S_IWUSR

所有者具有写入权限。

stat.S_IXUSR

所有者具有执行权限。

stat.S_IRWXG

组权限的掩码。

stat.S_IRGRP

组具有读取权限。

stat.S_IWGRP

组具有写入权限。

stat.S_IXGRP

组具有执行权限。

stat.S_IRWXO

其他用户(不在组中)的权限掩码。

stat.S_IROTH

其他用户具有读取权限。

stat.S_IWOTH

其他用户具有写入权限。

stat.S_IXOTH

其他用户具有执行权限。

stat.S_ENFMT

System V 文件锁定强制。 此标志与 S_ISGID 共享:在没有设置组执行位(S_IXGRP)的文件上强制执行文件/记录锁定。

stat.S_IREAD

Unix V7 中 S_IRUSR 的同义词。

stat.S_IWRITE

Unix V7 中 S_IWUSR 的同义词。

stat.S_IEXEC

Unix V7 中 S_IXUSR 的同义词。

以下标志可以在 os.chflags()flags 参数中使用。

stat.UF_SETTABLE

所有用户可设置的标志。

3.13 版本新增。

stat.UF_NODUMP

不要转储文件。

stat.UF_IMMUTABLE

文件不可更改。

stat.UF_APPEND

文件只能追加写入。

stat.UF_OPAQUE

通过联合堆栈查看时,目录是不透明的。

文件不可重命名或删除。

stat.UF_COMPRESSED

文件以压缩格式存储 (macOS 10.6+)。

stat.UF_TRACKED

用于处理文档 ID (macOS)

3.13 版本新增。

stat.UF_DATAVAULT

该文件需要授权才能进行读取或写入操作 (macOS 10.13+)

3.13 版本新增。

stat.UF_HIDDEN

该文件不应在 GUI 中显示 (macOS 10.5+)。

stat.SF_SETTABLE

所有超级用户可更改的标志

3.13 版本新增。

stat.SF_SUPPORTED

所有超级用户支持的标志

可用性: macOS

3.13 版本新增。

stat.SF_SYNTHETIC

所有超级用户只读的合成标志

可用性: macOS

3.13 版本新增。

stat.SF_ARCHIVED

该文件可以被存档。

stat.SF_IMMUTABLE

文件不可更改。

stat.SF_APPEND

文件只能追加写入。

stat.SF_RESTRICTED

该文件需要授权才能写入 (macOS 10.13+)

3.13 版本新增。

文件不可重命名或删除。

stat.SF_SNAPSHOT

该文件是一个快照文件。

该文件是一个硬链接 (macOS 10.15+)

3.13 版本新增。

stat.SF_DATALESS

该文件是一个无数据对象 (macOS 10.15+)

3.13 版本新增。

有关更多信息,请参阅 *BSD 或 macOS 系统的手册页 chflags(2)

在 Windows 上,当测试由 os.stat() 返回的 st_file_attributes 成员中的位时,可以使用以下文件属性常量。有关这些常量的含义的更多详细信息,请参阅Windows API 文档

stat.FILE_ATTRIBUTE_ARCHIVE
stat.FILE_ATTRIBUTE_COMPRESSED
stat.FILE_ATTRIBUTE_DEVICE
stat.FILE_ATTRIBUTE_DIRECTORY
stat.FILE_ATTRIBUTE_ENCRYPTED
stat.FILE_ATTRIBUTE_HIDDEN
stat.FILE_ATTRIBUTE_INTEGRITY_STREAM
stat.FILE_ATTRIBUTE_NORMAL
stat.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
stat.FILE_ATTRIBUTE_NO_SCRUB_DATA
stat.FILE_ATTRIBUTE_OFFLINE
stat.FILE_ATTRIBUTE_READONLY
stat.FILE_ATTRIBUTE_REPARSE_POINT
stat.FILE_ATTRIBUTE_SPARSE_FILE
stat.FILE_ATTRIBUTE_SYSTEM
stat.FILE_ATTRIBUTE_TEMPORARY
stat.FILE_ATTRIBUTE_VIRTUAL

3.5 版本新增。

在 Windows 上,以下常量可用于与 os.lstat() 返回的 st_reparse_tag 成员进行比较。这些是众所周知的常量,但不是详尽的列表。

stat.IO_REPARSE_TAG_MOUNT_POINT

3.8 版本新增。