Сообщить об ошибке.

Функция access() модуля os в Python

Проверить доступ пользователя к файлу или директории

Синтаксис:

import os

os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)

Параметры:

Возвращаемое значение:

Описание:

Функция access() модуля os проверяет доступ к пути path для реальных uid/gid. Обратите внимание, что в большинстве операций используется эффективный uid/gid, поэтому эту процедуру можно использовать в среде suid/sgid для проверки, имеет ли вызывающий пользователь указанный доступ к пути path.

Аргумент path может принимать объекты, представляющие путь к файловой системе, такие как pathlib.PurePath.

Аргумент mode должен быть os.F_OK для проверки существования пути. для проверки прав доступа режимы проверки os.R_OK, os.W_OK и os.X_OK можно объединять при помощи побитового ИЛИ '|'.

Функция os.access() вернет True, если доступ разрешен, False, если нет.

Функция может поддерживать указание путей относительно дескрипторов каталогов dir_fd и не следовать по символическими ссылками follow_symlinks=True.

Если значение effective_ids равно True, то os.access() выполнит свои проверки доступа, используя эффективный uid/gid вместо реального uid/gid. Аргумент effective_ids может не поддерживаться на вашей платформе. Вы можете проверить, доступен ли он, используя os.supports_effective_ids. Если он недоступен, его использование вызовет исключение NotImplementedError.

Примечание. НЕ используйте os.access() для проверки того, возможно ли открыть файл функцией open() перед тем как прочитать его. Используя функцию os.access() можно создать дыру в безопасности, потому что пользователь может использовать короткий промежуток времени между проверкой и открытием файла, чтобы манипулировать им.

# не используйте такую проверку
if os.access("myfile", os.R_OK):
    with open("myfile") as fp:
        return fp.read()
return "some default data"

# лучше сделать так
try:
    fp = open("myfile")
except PermissionError:
    return "some default data"
else:
    with fp:
        return fp.read()

Примечание. Операции ввода-вывода могут завершаться ошибкой, даже если os.access() покажет, что они будут выполнены успешно, особенно для операций с сетевыми файловыми системами, у которых может быть семантика разрешений, выходящая за рамки обычной модели битов разрешений POSIX.

Пример:

# test_access.py
import os

print('Testing:', __file__)
print('Exists:', os.access(__file__, os.F_OK))
print('Readable:', os.access(__file__, os.R_OK))
print('Writable:', os.access(__file__, os.W_OK))
print('Executable:', os.access(__file__, os.X_OK))

# Testing: test_access.py
# Exists: True
# Readable: True
# Writable: True
# Executable: False

Константы прав доступа.

os.F_OK,
os.R_OK,
os.W_OK,
os.X_OK
:

Это значения для передачи в качестве параметра mode в функцию проверки режима доступа os.access().

  • os.F_OK - проверка существования файла или каталога,
  • os.R_OK - проверка возможности чтения,
  • os.W_OK - проверка возможности записи,
  • os.X_OK - проверка выполнения файла или открытия директории