os.chown est exactement ce que je veux, mais je veux spécifier l'utilisateur et le groupe par nom, pas par ID (je ne sais pas ce qu'ils sont). Comment puis je faire ça?
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)
Depuis Python 3.3 https://docs.python.org/3.3/library/shutil.html#shutil.chown
import shutil
shutil.chown(path, user=None, group=None)
Changer l'utilisateur propriétaire et/ou le groupe du chemin donné.
utilisateur peut être un nom d'utilisateur système ou un uid; il en va de même pour le groupe.
Au moins un argument est requis.
Disponibilité: Unix.
Étant donné que la version shutil prend en charge le groupe étant facultatif, je copie et colle le code dans mon projet Python2.
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)