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 版本加入。

版本 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

Whiteout 檔案。

在 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

S_IRUSR 的 Unix V7 同義詞。

stat.S_IWRITE

S_IWUSR 的 Unix V7 同義詞。

stat.S_IEXEC

S_IXUSR 的 Unix V7 同義詞。

以下標誌可用於 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 版本加入。