Как я могу изменить права rwx на файл в python и как работают права? [Дубликат]

84
задан ArtOfWarfare 7 July 2015 в 18:34
поделиться

4 ответа

Используйте os.stat() для получения текущих разрешений, используйте | или бит вместе и используйте os.chmod() для установки обновленных разрешений.

Пример:

import os
import stat

st = os.stat('somefile')
os.chmod('somefile', st.st_mode | stat.S_IEXEC)
141
ответ дан csguimaraes 25 August 2018 в 18:30
поделиться

Если вы знаете требуемые разрешения, то следующий пример может быть простым способом.

Python 2:

os.chmod("/somedir/somefile", 0775)

Python 3:

os.chmod("/somedir/somefile", 0o775)

Совместимость с (восьмеричным преобразованием):

os.chmod("/somedir/somefile", 509)

ссылка примеры разрешений

3
ответ дан Drise 25 August 2018 в 18:30
поделиться

Для инструментов, которые генерируют исполняемые файлы (например, скрипты), может оказаться полезным следующий код:

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)
14
ответ дан Jonathon Reinhart 25 August 2018 в 18:30
поделиться

Вы также можете это сделать

>>> 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 сделать все доступным для чтения.

2
ответ дан ncmathsadist 25 August 2018 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: