Я хочу создать файл из исполняемого скрипта python.
import os
import stat
os.chmod('somefile', stat.S_IEXEC)
похоже os.chmod
, не «добавляет» разрешения, как это chmod
делает unix . Если последняя строка закомментирована, файл имеет файловый режим -rw-r--r--
, а без комментариев - файловый режим ---x------
. Как я могу просто добавить u+x
флаг, сохранив при этом остальные режимы?
STAT_OWNER_EXECUTABLE = stat.S_IEXEC
и использовал удобочитаемую локальную константу вместо тарабарщины.subprocess.check_call(['chmod', '+x', 'somefile'])
и вам будет проще выполнять такие операции, какa+rx
.Для инструментов, которые генерируют исполняемые файлы (например, скрипты), может быть полезен следующий код:
Это заставляет его (более или менее) уважать то,
umask
что было в силе при создании файла: Executable устанавливается только для тех, кто может читать.Использование:
источник
0444
вы должны использовать0o444
. Или, если вы хотите поддержать обоих, просто напишите292
.Если вы знаете, какие разрешения вам нужны, следующий пример может помочь вам упростить задачу.
Python 2:
Python 3:
Совместим с любым (восьмеричное преобразование):
справочные примеры разрешений
источник
Вы также можете сделать это
Текущий список файла
А теперь сделай это.
и вы увидите это в терминале.
Вы можете поразрядно или с 0o111 сделать все исполняемые файлы, 0o222 сделать все доступными для записи и 0o444 сделать все доступными для чтения.
источник
Уважай
umask
какchmod +x
man chmod
говорит, что еслиaugo
не дается как в:then
a
используется, но сumask
:Вот версия, которая точно имитирует это поведение:
См. Также: Как получить права доступа к файлам по умолчанию в Python?
Протестировано в Ubuntu 16.04, Python 3.5.2.
источник
В python3:
Не забудьте добавить
0o
префикс, поскольку разрешения устанавливаются как восьмеричное целое число, а Python автоматически обрабатывает любое целое число с нулем в начале как восьмеричное. В противном случае выos.chmod("somefile", 1230)
действительно проходите , что является восьмеричным от664
.источник
chmod +
как просит OP, который должен добавлять новые разрешения к существующим.Если вы используете Python 3.4+, вы можете использовать удобный pathlib стандартной библиотеки .
Его класс Path имеет встроенные методы chmod и stat .
источник