все Python 3osфункция
os.fchmod
os — права и владелец
Как chmod, но по открытому файловому дескриптору. На Windows — с Python 3.13 и только флаг «только чтение».
Синтаксис
os.fchmod(...)
Меняет права у уже открытого файла, а не у пути, поэтому не попадает в гонку, когда файл между проверкой и сменой прав подменили. Типичный приём — создать файл с ограниченными правами сразу, через os.open с mode, а не открыть и потом сужать права. На Windows доступна с 3.13 и меняет только флаг «только чтение».
Примеры
import os
f = open('demo_fd.txt', 'w') # → ? открываем файл и дальше работаем через его дескриптор
fd = f.fileno() # → ? номер дескриптора, например 3
os.fchmod(fd, 0o600) # → ? только Unix: то же, что os.chmod(path, 0o600), но привязано к дескриптору, а не к имени файла
print(oct(os.fstat(fd).st_mode & 0o777)) # → 0o600
os.fchmod(fd, 0o644) # → ? только Unix: открываем чтение остальным; файл могли переименовать — дескриптор всё равно указывает на него
f.close() # → ? закрываем файл, дескриптор становится недействительным
os.fchmod(fd, 0o600) # → OSError: Bad file descriptor — по закрытому дескриптору права менять нельзя
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности