stat
— 解释 stat()
结果¶
源代码: Lib/stat.py
stat
模块定义了用于解释 os.stat()
、os.fstat()
和 os.lstat()
结果(如果存在)的常量和函数。有关 stat()
、fstat()
和 lstat()
调用的完整详细信息,请查阅您系统的文档。
版本 3.4 中的变化: stat 模块由 C 实现支持。
stat
模块定义了以下函数来测试特定文件类型:
- stat.S_ISDIR(mode)¶
如果模式来自目录,则返回非零值。
- stat.S_ISCHR(mode)¶
如果模式来自字符特殊设备文件,则返回非零值。
- stat.S_ISBLK(mode)¶
如果模式来自块特殊设备文件,则返回非零值。
- stat.S_ISREG(mode)¶
如果模式来自常规文件,则返回非零值。
- stat.S_ISFIFO(mode)¶
如果模式来自 FIFO(命名管道),则返回非零值。
- stat.S_ISLNK(mode)¶
如果模式来自符号链接,则返回非零值。
- stat.S_ISSOCK(mode)¶
如果模式来自套接字,则返回非零值。
- stat.S_ISDOOR(mode)¶
如果模式来自门文件,则返回非零值。
在 3.4 版本加入。
- stat.S_ISPORT(mode)¶
如果模式来自事件端口,则返回非零值。
在 3.4 版本加入。
- stat.S_ISWHT(mode)¶
如果模式来自 whiteout 文件,则返回非零值。
在 3.4 版本加入。
定义了两个附加函数,用于对文件模式进行更通用的操作:
- stat.S_IMODE(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 版本加入。
以下所有变量都是 os.stat()
、os.fstat()
或 os.lstat()
返回的 10 元组中的符号索引。
- stat.ST_MODE¶
Inode 保护模式。
- stat.ST_INO¶
Inode 号。
- stat.ST_DEV¶
Inode 所在的设备。
- stat.ST_NLINK¶
指向 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¶
Whiteout 文件。
在 3.4 版本加入。
以下标志也可用于 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¶
其他用户有执行权限。
以下标志可用于 os.chflags()
的 flags 参数。
- stat.UF_SETTABLE¶
所有用户可设置的标志。
在 3.13 版本加入。
- stat.UF_NODUMP¶
不转储文件。
- stat.UF_IMMUTABLE¶
文件不可更改。
- stat.UF_APPEND¶
文件只能追加。
- stat.UF_OPAQUE¶
当通过联合栈查看时,目录是不透明的。
- stat.UF_NOUNLINK¶
文件不可重命名或删除。
- 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_ARCHIVED¶
文件可以归档。
- stat.SF_IMMUTABLE¶
文件不可更改。
- stat.SF_APPEND¶
文件只能追加。
- stat.SF_RESTRICTED¶
文件需要授权才能写入 (macOS 10.13+)
在 3.13 版本加入。
- stat.SF_NOUNLINK¶
文件不可重命名或删除。
- stat.SF_SNAPSHOT¶
文件是一个快照文件。
- stat.SF_FIRMLINK¶
文件是一个硬链接 (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
成员进行比较。这些是众所周知的常量,但并非详尽列表。