Поважайте umask
якchmod +x
man chmod
каже, що якщо augo
не вказано як у:
chmod +x mypath
потім a
використовується, але з umask
:
Комбінація букв ugoa визначає, яким чином буде змінено доступ користувачів до файлу: користувача, якому належить (u), інших користувачів у групі файлу (g), інших користувачів, які не належать до групи файлів (o), або всіх користувачів (а). Якщо нічого з цього не наводиться, ефект є таким, як якщо б (а) було надано, але біти, встановлені в умасці, не впливають.
Ось версія, яка точно моделює таку поведінку:
#!/usr/bin/env python3
import os
import stat
def get_umask():
umask = os.umask(0)
os.umask(umask)
return umask
def chmod_plus_x(path):
os.chmod(
path,
os.stat(path).st_mode |
(
(
stat.S_IXUSR |
stat.S_IXGRP |
stat.S_IXOTH
)
& ~get_umask()
)
)
chmod_plus_x('.gitignore')
Дивіться також: Як я можу отримати дозволи файлу за замовчуванням у Python?
Тестовано в Ubuntu 16.04, Python 3.5.2.