it-swarm.com.de

Wie finde ich das echte Benutzerverzeichnis mit Python?

Ich sehe, wenn wir die Umgebungsvariable HOME (linux) oder USERPROFILE (windows) ändern und ein Python-Skript ausführen, wird der neue Wert als Benutzer home zurückgegeben, als ich es versucht habe Os.environ ['HOME'] os.exp

Gibt es eine Möglichkeit, das echte Benutzerverzeichnis zu finden, ohne sich auf die Umgebungsvariable zu verlassen?

edit:
Hier finden Sie eine Möglichkeit, den Benutzer in Windows durch Lesen in der Registrierung zu finden.
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

edit:
Eine Möglichkeit, Windows mit pywin32 zu finden,

from win32com.Shell import Shell,shellcon
home = Shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)
59
asdfg

Ich denke, os.path.expanduser(path) könnte hilfreich sein.

Geben Sie unter Unix und Windows das Argument mit einer Anfangskomponente von ~ oder ~user zurück, die durch das Basisverzeichnis dieses Benutzers ersetzt wird.

Unter Unix wird ein anfänglicher ~ durch die Umgebungsvariable HOME ersetzt, wenn diese gesetzt ist. Andernfalls wird das Heimatverzeichnis des aktuellen Benutzers im Kennwortverzeichnis durch das integrierte Modul pwd gesucht. Ein erster ~user wird direkt im Kennwortverzeichnis nachgeschlagen.

Unter Windows werden HOME und USERPROFILE verwendet, falls gesetzt, andernfalls wird eine Kombination aus HOMEPATH und HOMEDRIVE verwendet. Ein anfänglicher ~user wird behandelt, indem die letzte Verzeichniskomponente aus dem erstellten Benutzerpfad entfernt wird, der über abgeleitet wurde.

Wenn die Erweiterung fehlschlägt oder der Pfad nicht mit einer Tilde beginnt, wird der Pfad unverändert zurückgegeben.

Sie könnten also einfach folgendes tun:

os.path.expanduser('~user')
72
Felix Kling

Ich denke, os.path.expanduser(path) ist die beste Antwort auf Ihre Frage, aber es gibt eine Alternative, die in der Unix-Welt erwähnenswert sein sollte: das Paket pwd . z.B.

import os, pwd

pwd.getpwuid(os.getuid()).pw_dir
12
Brian M. Hunt
from pathlib import *

str(Path.home())

arbeitet in Python 3.5 und höher. Path.home() gibt ein Path-Objekt zurück, das eine API bereitstellt, die ich sehr nützlich finde.

7
Julius Kunze

home_folder = os.getenv('HOME')

Dies sollte auch unter Windows und Mac OS funktionieren, funktioniert auch unter Linux.

5
user250145

Für Windows;

import os
homepath = os.path.expanduser(os.getenv('USERPROFILE'))

gibt Ihnen ein Handle für das Home-Verzeichnis des aktuellen Benutzers und 

filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt'

gibt Ihnen einen Griff zur unteren Datei;

C:\Users\urUserName\Documents\myfile.txt
2
khawarizmi

Ich weiß, dass dies eine alte Frage ist, die beantwortet wurde, aber ich dachte, ich würde meine zwei Cents hinzufügen. Die akzeptierte Antwort funktionierte nicht für mich. Ich musste das Benutzerverzeichnis finden und wollte, dass es mit und ohne Sudo funktioniert. In Linux lautet mein Benutzerverzeichnis "/ home/someuser", mein Stammverzeichnis ist jedoch "/ root /". Auf meinem Mac lautet das Benutzerverzeichnis jedoch "/ Users/someuser". Folgendes habe ich am Ende getan:

_USERNAME = os.getenv("Sudo_USER") or os.getenv("USER") 
_HOME = os.path.expanduser('~'+_USERNAME)

Dies funktionierte sowohl mit als auch ohne Sudo unter Mac und Linux.

1
Julien Spronck

Eine Änderung der Umgebungsvariablen zeigt tatsächlich an, dass das Heim geändert werden muss. Daher sollte jedes Programm/Skript die neue Heimat im Kontext haben. Die Konsequenzen liegen auch bei der Person, die sie geändert hat. Ich würde noch bei home = os.getenv('USERPROFILE') or os.getenv('HOME') bleiben

was ist genau erforderlich?

1
ring bearer

benutzerordnernamen unter Linux übersetzen:

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)
0
Axel Schneider

Unter Linux und anderen UNIXoids können Sie immer einen Blick in /etc/passwd werfen. Das Ausgangsverzeichnis 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, ...

0
Jakob Borg