Используйте os.stat()
для получения текущих разрешений, используйте |
или бит вместе и используйте os.chmod()
для установки обновленных разрешений.
Пример:
import os
import stat
st = os.stat('somefile')
os.chmod('somefile', st.st_mode | stat.S_IEXEC)
Если вы знаете требуемые разрешения, то следующий пример может быть простым способом.
Python 2:
os.chmod("/somedir/somefile", 0775)
Python 3:
os.chmod("/somedir/somefile", 0o775)
Совместимость с (восьмеричным преобразованием):
os.chmod("/somedir/somefile", 509)
ссылка примеры разрешений
Для инструментов, которые генерируют исполняемые файлы (например, скрипты), может оказаться полезным следующий код:
def make_executable(path):
mode = os.stat(path).st_mode
mode |= (mode & 0o444) >> 2 # copy R bits to X
os.chmod(path, mode)
Это делает его (более или менее) уважающим umask
, который действовал, когда файл был создан: Исполняемый файл установлен только для тех, которые могут быть прочитаны.
Использование:
path = 'foo.sh'
with open(path, 'w') as f: # umask in effect when file is created
f.write('#!/bin/sh\n')
f.write('echo "hello world"\n')
make_executable(path)
Вы также можете это сделать
>>> import os
>>> st = os.stat("hello.txt")
Текущий список файлов
$ ls -l hello.txt
-rw-r--r-- 1 morrison staff 17 Jan 13 2014 hello.txt
Теперь сделайте это.
>>> os.chmod("hello.txt", st.st_mode | 0o111)
, и вы увидите это в терминале.
ls -l hello.txt
-rwxr-xr-x 1 morrison staff 17 Jan 13 2014 hello.txt
Вы можете побитовое или с 0o111 сделать все исполняемые файлы, 0o222, чтобы сделать все доступным для записи, и 0o444 сделать все доступным для чтения.