stat —解释 stat()结果

源代码: Lib/stat.py


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

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

stat模块定义了以下Function来测试特定的文件类型:

  • stat. S_ISDIR(模式)

    • 如果模式来自目录,则返回非零值。
  • stat. S_ISCHR(模式)

    • 如果模式来自字符特殊设备文件,则返回非零值。
  • stat. S_ISBLK(模式)

    • 如果模式来自块特殊设备文件,则返回非零值。
  • stat. S_ISREG(模式)

    • 如果模式来自常规文件,则返回非零值。
  • stat. S_ISFIFO(模式)

    • 如果模式来自 FIFO(命名管道),则返回非零值。
  • stat. S_ISLNK(模式)

    • 如果模式来自符号链接,则返回非零值。
  • stat. S_ISSOCK(模式)

    • 如果模式来自套接字,则返回非零值。
  • stat. S_ISDOOR(模式)

    • 如果模式来自门,则返回非零值。

3.4 版的新Function。

  • stat. S_ISPORT(模式)
    • 如果模式来自事件端口,则返回非零值。

3.4 版的新Function。

  • stat. S_ISWHT(模式)
    • 如果模式是从停电状态返回非零值。

3.4 版的新Function。

定义了两个附加Function,用于对文件模式进行更常规的操作:

  • stat. S_IMODE(模式)

    • 返回文件模式中可以由os.chmod()设置的部分,即文件的权限位,加上粘性位,set-group-id 和 set-user-id 位(在支持它们的系统上)。
  • stat. S_IFMT(模式)

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

通常,您可以使用os.path.is*()函数来测试文件的类型。当您对同一个文件进行多个测试并且希望避免每个测试stat()系统调用的开销时,此处的Function很有用。当检查有关os.path未处理的文件的信息(例如对块和字符设备的测试)时,这些Function也很有用。

Example:

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.stat(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)

提供了附加的 Util Function,以人类可读的字符串形式转换文件的模式:

  • stat. filemode(模式)
    • 将文件的模式转换为格式为-rwxrwxrwx 的字符串。

版本 3.3 中的新Function。

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

以下所有变量都是os.stat()os.fstat()os.lstat()返回的 10Tuples 的简单符号索引。

  • stat. ST_MODE

    • 索引节点保护模式。
  • stat. ST_INO

    • Inode number.
  • stat. ST_DEV

    • 设备 inode 驻留在。
  • stat. ST_UID

    • 所有者的用户标识。
  • stat. ST_GID

    • 所有者的组标识。
  • stat. ST_SIZE

    • 普通文件的大小(以字节为单位);await 某些特殊文件的数据量。
  • stat. ST_ATIME

    • 上次访问时间。
  • stat. ST_MTIME

    • 上次修改时间。
  • stat. ST_CTIME

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

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

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

与使用第一组标志相比,使用上述Function更方便:

  • stat. S_IFSOCK

    • Socket.
  • stat. S_IFLNK

    • Symbolic link.
  • stat. S_IFREG

    • Regular file.
  • stat. S_IFBLK

    • Block device.
  • stat. S_IFDIR

    • Directory.
  • stat. S_IFCHR

    • Character device.
  • stat. S_IFIFO

    • FIFO.
  • stat. S_IFDOOR

    • Door.

3.4 版的新Function。

  • stat. S_IFPORT
    • Event port.

3.4 版的新Function。

  • stat. S_IFWHT
    • Whiteout.

3.4 版的新Function。

Note

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

以下标志也可以在os.chmod()的* mode *参数中使用:

  • stat. S_ISUID

    • 将 UID 位置 1.
  • stat. S_ISGID

    • 设置组 ID 位。该位有几种特殊用途。对于目录,它指示该目录将使用 BSD 语义:在该目录中创建的文件将从该目录继承其组 ID,而不是从创建过程的有效组 ID 继承,并且在该目录中创建的目录也将获得S_ISGID位。对于未设置组执行位(S_IXGRP)的文件,set-group-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

  • stat. S_IWRITE

  • stat. S_IEXEC

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

  • stat. UF_NODUMP

    • 不要转储文件。
  • stat. UF_IMMUTABLE

    • 该文件可能无法更改。
  • stat. UF_APPEND

    • 该文件只能附加到。
  • stat. UF_OPAQUE

    • pass联合堆栈查看时,该目录是不透明的。
  • stat. UF_COMPRESSED

    • 该文件已压缩存储(Mac OS X 10.6)。
  • stat. UF_HIDDEN

    • 该文件不应显示在 GUI 中(Mac OS X 10.5)。
  • stat. SF_ARCHIVED

    • 该文件可能已存档。
  • stat. SF_IMMUTABLE

    • 该文件可能无法更改。
  • stat. SF_APPEND

    • 该文件只能附加到。
  • stat. SF_SNAPSHOT

    • 该文件是快照文件。

有关更多信息,请参见* BSD 或 Mac OS 系统手册页* 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 版中的新Function。

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

  • stat. IO_REPARSE_TAG_MOUNT_POINT