os.chown es exactamente lo que quiero, pero quiero especificar el usuario y el grupo por nombre, no por ID (no sé cuáles son). ¿Cómo puedo hacer eso?¿Cómo cambiar los permisos de usuario y grupo para un directorio, por nombre?
39
A
Respuesta
82
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)
-1
17
Como Python 3.3 https://docs.python.org/3.3/library/shutil.html#shutil.chown
import shutil
shutil.chown(path, user=None, group=None)
Cambiar el usuario propietario y/o grupo de la ruta especificada.
usuario puede ser un nombre de usuario del sistema o un uid; lo mismo se aplica al grupo.
Se requiere al menos un argumento.
Disponibilidad: Unix.
2
Dado que la versión shutil admite que group sea opcional, copio y pegué el código en mi proyecto 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)
Cuestiones relacionadas
- 1. Permisos de usuario/grupo en Active Directory
- 2. ¿Cómo se configura un directorio para que tenga permisos de grupo persistentes?
- 3. Permisos por directorio en git
- 4. Crear directorio con permisos de escritura para el grupo
- 5. Los permisos de archivo no heredan los permisos de directorio
- 6. ¿Cómo cambiar el nombre de un directorio?
- 7. Cómo estructurar los permisos de usuario para un cms
- 8. Lea los permisos de un directorio en C#
- 9. Django - ¿permisos de usuario para ciertas vistas?
- 10. ¿Por qué obtengo "permiso denegado" en PHP cuando intento cambiar el nombre de un directorio?
- 11. Eliminar todos los permisos de directorio
- 12. ¿Cómo consultar los permisos en un directorio de Oracle?
- 13. Python - Probar los permisos del directorio
- 14. Python: encontrar uid/gid para un nombre de usuario/nombre de grupo dado (para os.chown)
- 15. Cómo cambiar el nombre de un directorio en Mercurial y seguir para realizar un seguimiento de todos los archivos cambia
- 16. Cambio de nombre de archivos por lotes en un directorio
- 17. ¿Establecer permisos predeterminados para los archivos y subdirectorios recién creados en un directorio de Linux?
- 18. Cómo obtener un nombre de usuario y SID para el usuario por un nombre de dominio en ldap
- 19. Cómo hacer que los permisos de grupo funcionen en Django-nonrel para Google App Engine
- 20. Permiso de grupo de cambio de Linux para que coincida con los permisos del propietario
- 21. ¿Cómo se configuran los permisos de directorio en NSIS?
- 22. ¿Cómo cambiar el nombre de los directorios?
- 23. SSRS 2008 - Los permisos otorgados al usuario 'computadora \ nombre de usuario' no son suficientes para realizar esta operación. (rsAccessDenied)
- 24. Regex: ¿Cómo obtener un nombre de grupo
- 25. Comando UNIX para cambiar recursivamente los permisos en los directorios?
- 26. los permisos del grupo y del propietario son incorrectos cuando php carga archivos
- 27. Cambiar el nombre de un directorio en C#
- 28. ¿Por qué los nombres de usuario no se pueden cambiar?
- 29. Git: cambiar el nombre de un directorio en una rama
- 30. permisos del Grupo de Symfony2 con ACL
posible duplicado de [Python: encontrar uid/gid para un nombre de usuario/nombre de grupo dado (por os.chown)] (http://stackoverflow.com/questions/826082/python-finding -uid-gid-for-a-given-username-groupname-for-os-chown) – Louis