Изменить разрешение на файлы в Python - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь сделать следующее:

Написать код, который проверяет разрешение каждого файла в каталоге «files». Если разрешение для 'group' не является 'rwx', измените разрешение для этого файла следующее: «пользователь» может rwx, «группа» может RWX, «другой» ничего не может сделать.

Я пробовал следующее:

import os
import stat

path = '/home/myname/files'
for r, d, f in os.walk(path):
  for file in f:
    if not os.access(file, stat.S_IRWXU):
      print("User cannot rwx: ", file)
      os.chmod(file, stat.S_IRWXU)
    if os.access(file, stat.S_IRWXG) == 0:
      print("Group cannot rwx: ", file)
      os.chmod(file, stat.S_IRWXG)

Однако я заметил две вещи.

  1. Что бы я ни пытался, я не могу заставить его проверить, не является ли это RWX. Он игнорирует «если нет», и «== 0» также не работает.
  2. Вызов S_IRWXU изменяет разрешение так, как я этого хочу, но когда я вызываю 'S_IRWXG' позже, разрешение пользователя исчезает. Это не то, что я хочу. Как мне исправить эти две вещи?

1 Ответ

0 голосов
/ 24 мая 2019

Вот как я думаю, вы должны исправить свой код:

def isGroupRWX(file):
    # check the group bits of the file mode are all set (R, W and X)
    mode = os.stat(file).st_mode
    return (mode and 0b111000) == 0b111000

def fixPermissions(file):
    # set permissions for both user and group to RWX
    os.chmod(file, stat.S_IRWXG or stat.S_IRWXU)

Вам необходимо установить os.stat, чтобы получить режим файла, поскольку вам нужно явно проверить права доступа группы, а не только то, может ли текущий пользователь получить доступ к файлу.

И вы можете передать комбинацию режимов в os.chmod, чтобы установить их все одновременно, что решит вашу вторую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...