stat --- 解析 stat() 結(jié)果?

源代碼: Lib/stat.py


stat 模塊定義了一些用于解析 os.stat(), os.fstat()os.lstat() (如果它們存在) 輸出結(jié)果的常量和函數(shù)。 有關(guān) stat(), fstat()lstat() 調(diào)用的完整細(xì)節(jié),請參閱你的系統(tǒng)文檔。

在 3.4 版更改: stat 模塊是通過 C 實現(xiàn)來支持的。

stat 模塊定義了以下函數(shù)來檢測特定文件類型:

stat.S_ISDIR(mode)?

如果 mode 來自一個目錄則返回非零值。

stat.S_ISCHR(mode)?

如果 mode 來自一個字符特殊設(shè)備文件則返回非零值。

stat.S_ISBLK(mode)?

如果 mode 來自一個塊特殊設(shè)備文件則返回非零值。

stat.S_ISREG(mode)?

如果 mode 來自一個常規(guī)文件則返回非零值。

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 新版功能.

定義了兩個附加函數(shù)用于對文件模式進(jìn)行更一般化的操作:

stat.S_IMODE(mode)?

返回文件模式中可由 os.chmod() 進(jìn)行設(shè)置的部分 --- 即文件的 permission 位,加上 sticky 位、set-group-id 以及 set-user-id 位(在支持這些部分的系統(tǒng)上)。

stat.S_IFMT(mode)?

返回文件模式中描述文件類型的部分(供上面的 S_IS*() 函數(shù)使用)。

通常,你應(yīng)當(dāng)使用 os.path.is*() 函數(shù)來檢測文件的類型;這里提供的函數(shù)則適用于當(dāng)你要對同一文件執(zhí)行多項檢測并且希望避免每項檢測的 stat() 系統(tǒng)調(diào)用開銷的情況。 這些函數(shù)也適用于檢測有關(guān)未被 os.path 處理的信息,例如檢測塊和字符設(shè)備等。

示例:

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)

另外還提供了一個附加的輔助函數(shù)用來將文件模式轉(zhuǎn)換為人類易讀的字符串:

stat.filemode(mode)?

將文件模式轉(zhuǎn)換為 '-rwxrwxrwx' 形式的字符串。

3.3 新版功能.

在 3.4 版更改: 此函數(shù)支持 S_IFDOOR, S_IFPORT and S_IFWHT。

以下所有變量是一些簡單的符號索引,用于訪問 os.stat(), os.fstat()os.lstat() 所返回的 10 條目元組。

stat.ST_MODE?

inode 保護(hù)模式。

stat.ST_INO?

Inode 號

stat.ST_DEV?

Inode 所在的設(shè)備。

Inode 擁有的鏈接數(shù)量。

stat.ST_UID?

所有者的用戶 ID。

stat.ST_GID?

所有者的用戶組ID。

stat.ST_SIZE?

以字節(jié)為單位的普通文件大??;對于某些特殊文件則是所等待的數(shù)據(jù)量。

stat.ST_ATIME?

上次訪問的時間。

stat.ST_MTIME?

上次修改的時間。

stat.ST_CTIME?

操作系統(tǒng)所報告的 "ctime"。 在某些系統(tǒng)上(例如 Unix)是元數(shù)據(jù)的最后修改時間,而在其他系統(tǒng)上(例如 Windows)則是創(chuàng)建時間(請參閱系統(tǒng)平臺的文檔了解相關(guān)細(xì)節(jié))。

對于“文件大小”的解析可因文件類型的不同而變化。 對于普通文件就是文件的字節(jié)數(shù)。 對于大部分種類的 Unix(特別包括 Linux)的 FIFO 和套接字來說,“大小”則是指在調(diào)用 os.stat(), os.fstat()os.lstat() 時等待讀取的字節(jié)數(shù);這在某些時候很有用處,特別是在一個非阻塞的打開后輪詢這些特殊文件中的一個時。 其他字符和塊設(shè)備的文件大小字段的含義還會有更多變化,具體取決于底層系統(tǒng)調(diào)用的實現(xiàn)方式。

以下變量定義了在 ST_MODE 字段中使用的旗標(biāo)。

使用上面的函數(shù)會比使用第一組旗標(biāo)更容易移植:

stat.S_IFSOCK?

套接字。

stat.S_IFLNK?

符號鏈接。

stat.S_IFREG?

普通文件。

stat.S_IFBLK?

塊設(shè)備。

stat.S_IFDIR?

目錄。

stat.S_IFCHR?

字符設(shè)備。

stat.S_IFIFO?

先進(jìn)先出。

stat.S_IFDOOR?

門。

3.4 新版功能.

stat.S_IFPORT?

事件端口。

3.4 新版功能.

stat.S_IFWHT?

白輸出。

3.4 新版功能.

備注

S_IFDOOR, S_IFPORT or S_IFWHT 等文件類型在不受系統(tǒng)平臺支持時會被定義為 0。

以下旗標(biāo)還可以 os.chmod() 的在 mode 參數(shù)中使用:

stat.S_ISUID?

設(shè)置 UID 位。

stat.S_ISGID?

設(shè)置分組 ID 位。 這個位有幾種特殊用途。 對于目錄它表示該目錄將使用 BSD 語義:在其中創(chuàng)建的文件將從目錄繼承其分組 ID,而不是從創(chuàng)建進(jìn)程的有效分組 ID 繼承,并且在其中創(chuàng)建的目錄也將設(shè)置 S_ISGID 位。 對于沒有設(shè)置分組執(zhí)行位 (S_IXGRP) 的文件,設(shè)置分組 ID 位表示強(qiáng)制性文件/記錄鎖定 (另請參見 S_ENFMT)。

stat.S_ISVTX?

固定位。 當(dāng)對目錄設(shè)置該位時則意味著此目錄中的文件只能由文件所有者、目錄所有者或特權(quán)進(jìn)程來重命名或刪除。

stat.S_IRWXU?

文件所有者權(quán)限的掩碼。

stat.S_IRUSR?

所有者具有讀取權(quán)限。

stat.S_IWUSR?

所有者具有寫入權(quán)限。

stat.S_IXUSR?

所有者具有執(zhí)行權(quán)限。

stat.S_IRWXG?

組權(quán)限的掩碼。

stat.S_IRGRP?

組具有讀取權(quán)限。

stat.S_IWGRP?

組具有寫入權(quán)限。

stat.S_IXGRP?

組具有執(zhí)行權(quán)限。

stat.S_IRWXO?

其他人(不在組中)的權(quán)限掩碼。

stat.S_IROTH?

其他人具有讀取權(quán)限。

stat.S_IWOTH?

其他人具有寫入權(quán)限。

stat.S_IXOTH?

其他人具有執(zhí)行權(quán)限。

stat.S_ENFMT?

System V 執(zhí)行文件鎖定。 此旗標(biāo)是與 S_ISGID 共享的:文件/記錄鎖定會針對未設(shè)置分組執(zhí)行位 (S_IXGRP) 的文件強(qiáng)制執(zhí)行。

stat.S_IREAD?

Unix V7 中 S_IRUSR 的同義詞。

stat.S_IWRITE?

Unix V7 中 S_IWUSR 的同義詞。

stat.S_IEXEC?

Unix V7 中 S_IXUSR 的同義詞。

以下旗標(biāo)可以在 os.chflags()flags 參數(shù)中使用:

stat.UF_NODUMP?

不要轉(zhuǎn)儲文件。

stat.UF_IMMUTABLE?

文件不能被更改。

stat.UF_APPEND?

文件只能被附加。

stat.UF_OPAQUE?

當(dāng)通過聯(lián)合堆棧查看時,目錄是不透明的。

文件不能重命名或刪除。

stat.UF_COMPRESSED?

The file is stored compressed (macOS 10.6+).

stat.UF_HIDDEN?

The file should not be displayed in a GUI (macOS 10.5+).

stat.SF_ARCHIVED?

文件可能已存檔。

stat.SF_IMMUTABLE?

文件不能被更改。

stat.SF_APPEND?

文件只能被附加。

文件不能重命名或刪除。

stat.SF_SNAPSHOT?

文件有一個快照文件

See the *BSD or macOS systems man page chflags(2) for more information.

在 Windows 上,以下文件屬性常量可被用來檢測 os.stat() 所返回的 st_file_attributes 成員中的位。 請參閱 Windows API 文檔 了解有關(guān)這些常量含義的詳情。

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 成員進(jìn)行比較。 這些是最主要的常量,而不是詳盡的清單。

stat.IO_REPARSE_TAG_MOUNT_POINT?

3.8 新版功能.