stat – интерпретация результатов stat()¶stat – Interpreting stat() results
Модуль stat определяет константы и функции для интерпретации результатов os.stat(), os.fstat() и os.lstat() (если они существуют). Подробные сведения о вызовах stat, fstat и lstat можно найти в документации вашей системы.
Модуль 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_IMODE(mode)¶
- Возвращает часть режима файла, которая может быть установлена с помощью os.chmod() – то есть биты разрешений файла, а также биты sticky, set-group-id и set-user-id (в системах, которые их поддерживают).
- stat.S_IFMT(mode)¶
- Возвращает часть режима файла, которая описывает тип файла (используется функциями S_IS*() выше).
Обычно для проверки типа файла используются функции os.path.is*(); функции из этого модуля полезны, когда нужно выполнить несколько проверок одного и того же файла и избежать издержек системного вызова stat для каждой проверки. Они также пригодятся при проверке информации о файле, которая не обрабатывается модулем os.path, например, для проверки блочных и символьных устройств.
Все приведённые ниже переменные – это просто символические индексы в 10-кортеже, возвращаемом os.stat(), os.fstat() или os.lstat().
- stat.ST_MODE¶
- Режим защиты inode.
- stat.ST_INO¶
- Номер inode.
- stat.ST_DEV¶
- Устройство, на котором находится inode.
- stat.ST_NLINK¶
- Количество ссылок на inode.
- stat.ST_UID¶
- Идентификатор пользователя владельца.
- stat.ST_GID¶
- Идентификатор группы владельца.
- stat.ST_SIZE¶
- Размер обычного файла в байтах; количество данных, ожидающих чтения на некоторых специальных файлах.
- stat.ST_ATIME¶
- Время последнего доступа.
- stat.ST_MTIME¶
- Время последнего изменения.
- stat.ST_CTIME¶
- «ctime» в том виде, в котором он сообщается операционной системой. В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) – время создания (подробнее см. документацию платформы).
Интерпретация «размера файла» меняется в зависимости от типа файла. Для обычных файлов это размер файла в байтах. Для FIFO (именованных каналов) и сокетов в большинстве вариантов Unix (включая Linux) «размер» – это количество байтов, ожидающих чтения на момент вызова os.stat(), os.fstat() или os.lstat(); это может быть полезно, например, для опроса одного из этих специальных файлов после неблокирующего открытия. Значение поля размера для других символьных и блочных устройств сильно варьируется в зависимости от реализации базового системного вызова.
Пример:
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)