it-swarm.com.de

Wie ändere ich die Benutzer- und Gruppenberechtigungen für ein Verzeichnis nach Namen?

os.chown ist genau das, was ich will, aber ich möchte den Benutzer und die Gruppe nach Namen angeben, nicht nach ID (ich weiß nicht, was sie sind). Wie kann ich das machen?

52
mpen
import pwd
import grp
import os

uid = pwd.getpwnam("nobody").pw_uid
gid = grp.getgrnam("nogroup").gr_gid
path = '/tmp/f.txt'
os.chown(path, uid, gid)
102

Seit Python 3.3 https://docs.python.org/3.3/library/shutil.html#shutil.chown

import shutil
shutil.chown(path, user=None, group=None)

Ändern Sie den Besitzer-Benutzer und/oder die Gruppe des angegebenen Pfads.

user kann ein Systembenutzername oder eine UID sein. Gleiches gilt für die Gruppe.

Mindestens ein Argument ist erforderlich.

Verfügbarkeit: Unix.

29
Oleg Neumyvakin

Da die Shutil-Version die Option group unterstützt, kopiere ich den Code und füge ihn in mein Python2-Projekt ein.

https://hg.python.org/cpython/file/tip/Lib/shutil.py#l101

def chown(path, user=None, group=None):
    """Change owner user and group of the given path.

    user and group can be the uid/gid or the user/group names, and in that case,
    they are converted to their respective uid/gid.
    """

    if user is None and group is None:
        raise ValueError("user and/or group must be set")

    _user = user
    _group = group

    # -1 means don't change it
    if user is None:
        _user = -1
    # user can either be an int (the uid) or a string (the system username)
    Elif isinstance(user, basestring):
        _user = _get_uid(user)
        if _user is None:
            raise LookupError("no such user: {!r}".format(user))

    if group is None:
        _group = -1
    Elif not isinstance(group, int):
        _group = _get_gid(group)
        if _group is None:
            raise LookupError("no such group: {!r}".format(group))

    os.chown(path, _user, _group)
3
guettli