Cela n'entre pas vraiment dans le cadre de la question (cela étant étiqueté comme cross-platform
), mais peut-être que cela peut être utile à quelqu'un.
Comment obtenir le répertoire d'origine de efficace utilisateur (spécifique à Linux) .
Imaginons que vous écriviez un installateur script ou une autre solution qui nécessite d'effectuer certaines actions sous certains utilisateurs locaux. Vous accompliriez très probablement cela dans votre installateur script en changeant l'utilisateur effectif, mais os.path.expanduser("~")
retournera toujours /root
.
L'argument doit comporter le nom d'utilisateur souhaité :
os.path.expanduser(f"~{USERNAME}/")
Notez que ce qui précède fonctionne bien sans changer l'EUID, mais si le scénario décrit précédemment s'applique, l'exemple ci-dessous montre comment cela pourrait être utilisé :
import os
import pwd
import grp
class Identity():
def __init__(self, user: str, group: str = None):
self.uid = pwd.getpwnam(user).pw_uid
if not group:
self.gid = pwd.getpwnam(user).pw_gid
else:
self.gid = grp.getgrnam(group).gr_gid
def __enter__(self):
self.original_uid = os.getuid()
self.original_gid = os.getgid()
os.setegid(self.uid)
os.seteuid(self.gid)
def __exit__(self, type, value, traceback):
os.seteuid(self.original_uid)
os.setegid(self.original_gid)
if __name__ == '__main__':
with Identity("hedy", "lamarr"):
homedir = os.path.expanduser(f"~{pwd.getpwuid(os.geteuid())[0]}/")
with open(os.path.join(homedir, "install.log"), "w") as file:
file.write("Your home directory contents have been altered")
6 votes
Il s'agit d'un duplicata de Comment trouver le répertoire d'origine de l'utilisateur réel en utilisant python mais j'ai voté pour la réouverture parce que cette réponse fonctionne sur Python 3 et que l'ancienne réponse ne fonctionne pas.
0 votes
Le titre de la question devrait être amélioré pour demander "Quelle est la manière correcte et multiplateforme d'obtenir le répertoire d'origine en Python ?".