import os os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)
path
- str
путь в файловой системе,mode
- проверяемый доступ,dir_fd=None
- путь относительно дескриптор каталога,effective_ids=False
- bool
, использование эффективных или реальных uid
/gid
,follow_symlinks=True
- bool
, переходить ли по ссылкам.Функция 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
- проверка выполнения файла или открытия директории