Python Glossary English

все 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Сообщить о неточности