examples - os.system() python
¿Cómo cambiar los permisos de usuario y grupo para un directorio, por nombre? (4)
Como la versión de shutil admite que group sea opcional, copio y pegué el código en mi proyecto de Python2.
https://hg.python.org/cpython/file/tip/Lib/shutil.py#l1010
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)
os.chown es exactamente lo que quiero, pero quiero especificar el usuario y el grupo por nombre, no por ID (no sé qué son). ¿Cómo puedo hacer eso?
Desde Python 3.3 https://docs.python.org/3.3/library/shutil.html#shutil.chown
import shutil
shutil.chown(path, user=None, group=None)
Cambiar usuario propietario y / o grupo de la ruta dada.
el usuario puede ser un nombre de usuario del sistema o un uid; lo mismo se aplica al grupo.
Al menos se requiere un argumento
Disponibilidad: Unix.
Puede usar id -u wong2
para obtener el usuario de un usuario
Puedes hacer esto con Python:
import os
def getUidByUname(uname):
return os.popen("id -u %s" % uname).read().strip()
A continuación, use la identificación para os.chown
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)