python3從零學習-5.4.4、解析stat()結果

源代碼: Lib/stat.py


stat 模塊定義了一些用於解析 os.stat(), os.fstat() 和 os.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 新版功能.在 3.4 版更改: 此函數支持 S_IFDOOR, S_IFPORT and S_IFWHT。

以下所有變量是一些簡單的符號索引,用於訪問 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 新版功能.

註解:S_IFDOOR, S_IFPORT or S_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:Unix V7 中 S_IRUSR 的同義詞。

stat.S_IWRITE:Unix V7 中 S_IWUSR 的同義詞。

stat.S_IEXEC:Unix V7 中 S_IXUSR 的同義詞。

以下旗標可以在 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:文件有一個快照文件

在 Windows 上,以下文件屬性常量可用於檢測 os.stat() 所返回的 st_file_attributes 成員中的位。

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章