Ich sehe, dass, wenn wir die Umgebungsvariable HOME (Linux) oder USERPROFILE (Windows) ändern und ein Python-Skript ausführen, der neue Wert als Benutzer-Home zurückgegeben wird, als ich es versuchte, os.environ ['HOME'] os.exp
Gibt es eine Möglichkeit, das Home-Verzeichnis des realen Benutzers zu finden, ohne sich auf die Umgebungsvariable zu verlassen?
Bearbeiten:
Hier finden Sie eine Möglichkeit, das Benutzerhaus in Windows zu finden, indem Sie in der Registrierung http://mail.python.org/pipermail/python-win32/2008-January/006677.html lesen
Bearbeiten:
Eine Möglichkeit, Windows Home mit pywin32 zu finden,
from win32com.shell import shell,shellcon
home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)
~user
Er führt Sie zum Ausgangsverzeichnis des aktuellen Benutzers. Auf Windows habe ich keine Ahnung.Antworten:
Ich denke
os.path.expanduser(path)
könnte hilfreich sein.Sie könnten also einfach tun:
os.path.expanduser('~user')
quelle
'~user'
Linux und Windows funktioniert (hier bin ich mir nicht 100% sicher, weil ich kein Windows zum Testen habe;)).Ich denke, es
os.path.expanduser(path)
ist die beste Antwort auf Ihre Frage, aber es gibt eine Alternative, die in der Unix-Welt erwähnenswert sein könnte: daspwd
Paket. z.Bimport os, pwd pwd.getpwuid(os.getuid()).pw_dir
quelle
from pathlib import * str(Path.home())
funktioniert in Python 3.5 und höher.
Path.home()
gibt einPath
Objekt zurück, das eine API bereitstellt, die ich sehr nützlich finde.quelle
pathlib
immer noch Umgebungsvariablen erforderlich, sodass Ihre spezifische Frage nicht beantwortet wird. Da die allgemeineren Fragen alle als Duplikate markiert waren und sich hier beziehen, ist dies möglicherweise der beste Ort für diese Antwort.home_folder = os.getenv('HOME')
Dies sollte auch unter Windows und Mac OS funktionieren, funktioniert gut unter Linux.
quelle
Für Windows;
import os homepath = os.path.expanduser(os.getenv('USERPROFILE'))
gibt Ihnen ein Handle zum Home-Verzeichnis des aktuellen Benutzers und
filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt'
gibt Ihnen ein Handle für die folgende Datei;
quelle
In der Tat zeigt eine Änderung der Umgebungsvariablen an, dass das Haus geändert werden muss. Daher sollte jedes Programm / Skript das neue Zuhause im Kontext haben. Auch die Konsequenzen liegen bei der Person, die sie geändert hat. Ich würde immer noch dabei bleiben
home = os.getenv('USERPROFILE') or os.getenv('HOME')
was genau ist erforderlich?
quelle
Mir ist klar, dass dies eine alte Frage ist, die beantwortet wurde, aber ich dachte, ich würde meine zwei Cent hinzufügen. Die akzeptierte Antwort funktionierte bei mir nicht. Ich musste das Benutzerverzeichnis finden und wollte, dass es mit und ohne funktioniert
sudo
. Unter Linux lautet mein Benutzerverzeichnis "/ home / someuser", mein Stammverzeichnis jedoch "/ root /". Auf meinem Mac lautet das Benutzerverzeichnis jedoch "/ Users / someuser". Folgendes habe ich getan:_USERNAME = os.getenv("SUDO_USER") or os.getenv("USER") _HOME = os.path.expanduser('~'+_USERNAME)
Dies funktionierte sowohl mit als auch ohne
sudo
auf Mac und Linux.quelle
_USERNAME
warNone
. Für zukünftige Leser.or ""
?Unter Linux und anderen UNIXoids können Sie jederzeit einen Blick darauf werfen
/etc/passwd
. Das Home-Verzeichnis ist das sechste durch Doppelpunkte getrennte Feld. Keine Ahnung, wie man es besser macht als die Umgebungsvariable unter Windows. Es wird einen Systemaufruf dafür geben, aber wenn es von Python verfügbar ist, ...quelle
Abrufen von (übersetzten) Benutzerordnernamen unter Linux:
from gi.repository import GLib docs = GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOCUMENTS) desktop = GLib.get_user_special_dir(GLib.USER_DIRECTORY_DESKTOP) pics = GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES) videos = GLib.get_user_special_dir(GLib.USER_DIRECTORY_VIDEOS) music = GLib.get_user_special_dir(GLib.USER_DIRECTORY_MUSIC) downloads = GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOWNLOAD) public = GLib.get_user_special_dir(GLib.USER_DIRECTORY_PUBLIC_SHARE) templates = GLib.get_user_special_dir(GLib.USER_DIRECTORY_TEMPLATES) print(docs) print(desktop) print(pics) print(videos) print(music) print(downloads) print(public) print(templates)
quelle