Python Glossary English

все Python 3statфункция

stat.S_IFMT()

биты режима

Вырезает из st_mode биты типа файла; результат сравнивают с константами S_IFREG, S_IFDIR и другими.

Синтаксис

stat.S_IFMT(mode) == stat.S_IFREG

Нужна, когда тип выбирают по словарю или в match: `kinds[stat.S_IFMT(mode)]`. Проверка `mode & stat.S_IFDIR` ошибочна: коды типов — не отдельные флаги, S_IFSOCK = 0o140000 и S_IFBLK = 0o060000 содержат бит каталога, и сокет «окажется» каталогом. Сравнивайте S_IFMT(mode) == константа или берите S_IS*.

Примеры

import os, stat
os.mkdir('d')
open('f', 'w').close()
kinds = {stat.S_IFDIR: 'каталог', stat.S_IFREG: 'файл'}
for name in ('d', 'f'):
    print(name, kinds[stat.S_IFMT(os.stat(name).st_mode)])  # → d каталог / f файл
import stat
sock = stat.S_IFSOCK | 0o755
print(bool(sock & stat.S_IFDIR), stat.S_ISDIR(sock))  # → True False — маска врёт, функция нет

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности