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

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

Изменить режим доступа к файлу/директории

Синтаксис:

import os

os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)
os.lchmod(path, mode)

Параметры:

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

  • None

Описание:

Функция chmod() модуля os изменяет режим доступа к файлу или директории, указанного в path.Функция os.lchmod() эквивалентна вызову функции с следующими установленными аргументами os.chmod(path, mode, follow_symlinks=False).

Изменено в Python 3.13: добавлена ​​поддержка дескриптора файла и аргумента follow_symlinks в Windows.

Аргумент mode может принимать последние 3 цифры восьмеричного представления числа, например 0o755 или одно или несколько из следующих значений, значения которых приведены в модуле stat:

Возможные значения mode:

  • stat.S_ISUID - Устанавливает бит идентификатора пользователя.
  • stat.S_ISGID - Устанавливает бит идентификатора группы. Этот бит имеет несколько специальных применений.
    • Для каталога это означает, что файлы наследуют идентификатор своей группы из каталога, а не от эффективного идентификатора группы процесса создания, и созданные там каталоги также получат установленный бит S_ISGID.
    • Для файла, который не имеет установленного бита выполнения группы S_IXGRP, бит set-group-ID указывает на обязательную блокировку файла/записей (смотрите также S_ENFMT).
  • stat.S_ISVTX - Липкий бит. Когда этот бит установлен в каталоге, это означает, что файл в этом каталоге может быть переименован или удален только владельцем файла, владельцем каталога или привилегированным процессом.
  • stat.S_IRWXU - Маска устанавливает для пользователя права rwx.
  • stat.S_IRUSR - Владелец имеет разрешение на чтение.
  • stat.S_IWUSR - Владелец имеет разрешение на запись.
  • stat.S_IXUSR - Владелец имеет разрешение на исполнение.,
  • stat.S_IRWXG - Маска устанавливает для группы права rwx.
  • stat.S_IRGRP - Группа имеет разрешение на чтение.
  • stat.S_IWGRP - Группа имеет разрешение на запись.
  • stat.S_IXGRP - Группа имеет разрешение на исполнение.
  • stat.S_IRWXO - Маска устанавливает для других (не в группе) права rwx.
  • stat.S_IROTH - Другие имеет разрешение на чтение.
  • stat.S_IWOTH - Другие имеет разрешение на запись.
  • stat.S_IXOTH - Другие имеет разрешение на исполнение.
  • stat.S_ENFMT - Система V принудительно блокирует файлы. Этот флаг используется совместно с S_ISGID: блокировка файлов/записей применяется к файлам, для которых не установлен бит выполнения группы (S_IXGRP),
  • stat.S_IREAD - Unix V7 синоним для S_IRUSR.
  • stat.S_IWRITE - Unix V7 синоним для S_IWUSR.
  • stat.S_IEXEC - Unix V7 синоним для S_IXUSR.

Приведенные выше значения можно комбинировать побитовым ИЛИ '|', например stat.S_IRWXU|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH. Данная комбинация установит разрешение rwxr-xr-- для пути, указанного в path.

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

Функция chmod() может поддерживать указание дескриптора файла, пути относительно дескрипторов каталога и не следовать символическим ссылкам follow_symlinks=False.

Примечание. Несмотря на то, что Windows поддерживает os.chmod(), можно установить для него флаг только для чтения через константы stat.S_IWRITE и stat.S_IREAD или соответствующее целочисленное значение. Все остальные биты игнорируются.

Вызывает событие аудита os.chmod с аргументами path, mode, dir_fd.

Примеры использования os.chmod()

>>> import os, stat
>>> f = 'tt.py'
>>> st = os.stat(f).st_mode
>>> stat.filemode(st)
# '-rw-rw-r--'

>>> os.chmod(f, 0o754)
>>> st = os.stat(f).st_mode
>>> stat.filemode(st)
# '-rwxr-xr--'

Этот пример переключает бит разрешения пользователя на выполнение:

import os
import stat

filename = 'tt.txt'
if os.path.exists(filename):
    os.unlink(filename)
with open(filename, 'wt') as f:
    f.write('contents')

# Определим установленные разрешения
existing_permissions = stat.S_IMODE(os.stat(filename).st_mode)

if not os.access(filename, os.X_OK):
    print('Добавим разрешение на запуск "x"')
    new_permissions = existing_permissions | stat.S_IXUSR
else:
    print('Удалим разрешения на выполнение "x"')
    # use xor to remove the user execute permission
    new_permissions = existing_permissions ^ stat.S_IXUSR

os.chmod(filename, new_permissions)