Dies ist nicht wirklich für die Frage qualifiziert (da es als cross-platform
), aber vielleicht kann dies für jemanden nützlich sein.
So erhalten Sie das Home-Verzeichnis für wirksam Benutzer (Linux-spezifisch) .
Stellen Sie sich vor, Sie schreiben ein Installationsskript oder eine andere Lösung, bei der Sie bestimmte Aktionen unter bestimmten lokalen Benutzern durchführen müssen. Wahrscheinlich würden Sie dies in Ihrem Installationsskript erreichen, indem Sie den effektiven Benutzer ändern, aber os.path.expanduser("~")
wird dennoch zurückkehren /root
.
Das Argument muss den gewünschten Benutzernamen enthalten:
os.path.expanduser(f"~{USERNAME}/")
Beachten Sie, dass die obige Vorgehensweise auch ohne Änderung der EUID funktioniert, aber wenn das zuvor beschriebene Szenario zutrifft, zeigt das folgende Beispiel, wie dies verwendet werden könnte:
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")