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)? 返回文件模式中可由
os.chmod()進行設置的部分 --- 即文件的 permission 位,加上 sticky 位、set-group-id 以及 set-user-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.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)
另外還提供了一個附加的輔助函數用來將文件模式轉換為人類易讀的字符串:
-
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? 先進先出
-
stat.S_IFDOOR? 門
3.4 新版功能.
-
stat.S_IFPORT? 事件端口。
3.4 新版功能.
-
stat.S_IFWHT? 白輸出。
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_NODUMP? 不要轉儲文件。
-
stat.UF_IMMUTABLE? 文件不能更改。
-
stat.UF_APPEND? 文件只能附加到。
-
stat.UF_OPAQUE? 當通過聯合堆棧查看時,目錄是不透明的。
-
stat.UF_NOUNLINK? 文件不能重命名或刪除。
-
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_NOUNLINK? 文件不能重命名或刪除。
-
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 新版功能.
