stat
--- 解析 stat()
結(jié)果?
源代碼: Lib/stat.py
stat
模塊定義了一些用于解析 os.stat()
, os.fstat()
和 os.lstat()
(如果它們存在) 輸出結(jié)果的常量和函數(shù)。 有關(guān) stat()
, fstat()
和 lstat()
調(diào)用的完整細節(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ù)用于對文件模式進行更一般化的操作:
- stat.S_IMODE(mode)?
返回文件模式中可由
os.chmod()
進行設(shè)置的部分 --- 即文件的 permission 位,加上 sticky 位、set-group-id 以及 set-user-id 位(在支持這些部分的系統(tǒng)上)。
- stat.S_IFMT(mode)?
返回文件模式中描述文件類型的部分(供上面的
S_IS*()
函數(shù)使用)。
通常,你應(yīng)當使用 os.path.is*()
函數(shù)來檢測文件的類型;這里提供的函數(shù)則適用于當你要對同一文件執(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 新版功能.
以下所有變量是一些簡單的符號索引,用于訪問 os.stat()
, os.fstat()
或 os.lstat()
所返回的 10 條目元組。
- stat.ST_MODE?
inode 保護模式。
- stat.ST_INO?
Inode 號
- stat.ST_DEV?
Inode 所在的設(shè)備。
- stat.ST_NLINK?
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)細節(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
字段中使用的旗標。
使用上面的函數(shù)會比使用第一組旗標更容易移植:
- stat.S_IFSOCK?
套接字。
- stat.S_IFLNK?
符號鏈接。
- stat.S_IFREG?
普通文件。
- stat.S_IFBLK?
塊設(shè)備。
- stat.S_IFDIR?
目錄。
- stat.S_IFCHR?
字符設(shè)備。
- stat.S_IFIFO?
先進先出。
- stat.S_IFDOOR?
門。
3.4 新版功能.
- stat.S_IFPORT?
事件端口。
3.4 新版功能.
- stat.S_IFWHT?
白輸出。
3.4 新版功能.
以下旗標還可以 os.chmod()
的在 mode 參數(shù)中使用:
- stat.S_ISUID?
設(shè)置 UID 位。
- stat.S_ISGID?
設(shè)置分組 ID 位。 這個位有幾種特殊用途。 對于目錄它表示該目錄將使用 BSD 語義:在其中創(chuàng)建的文件將從目錄繼承其分組 ID,而不是從創(chuàng)建進程的有效分組 ID 繼承,并且在其中創(chuàng)建的目錄也將設(shè)置
S_ISGID
位。 對于沒有設(shè)置分組執(zhí)行位 (S_IXGRP
) 的文件,設(shè)置分組 ID 位表示強制性文件/記錄鎖定 (另請參見S_ENFMT
)。
- stat.S_ISVTX?
固定位。 當對目錄設(shè)置該位時則意味著此目錄中的文件只能由文件所有者、目錄所有者或特權(quá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í)行文件鎖定。 此旗標是與
S_ISGID
共享的:文件/記錄鎖定會針對未設(shè)置分組執(zhí)行位 (S_IXGRP
) 的文件強制執(zhí)行。
以下旗標可以在 os.chflags()
的 flags 參數(shù)中使用:
- stat.UF_NODUMP?
不要轉(zhuǎn)儲文件。
- stat.UF_IMMUTABLE?
文件不能被更改。
- stat.UF_APPEND?
文件只能被附加。
- stat.UF_OPAQUE?
當通過聯(lián)合堆棧查看時,目錄是不透明的。
- stat.UF_NOUNLINK?
文件不能重命名或刪除。
- 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_NOUNLINK?
文件不能重命名或刪除。
- 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
成員進行比較。 這些是最主要的常量,而不是詳盡的清單。