99 votes

Comment trouver le répertoire principal de l'utilisateur réel en utilisant Python ?

Je vois que si nous changeons la variable d'environnement HOME (linux) ou USERPROFILE (windows) et exécutons un script python, il renvoie la nouvelle valeur comme le répertoire personnel de l'utilisateur lorsque j'essaie

os.environ['HOME']
os.exp

Y a-t-il un moyen de trouver le répertoire personnel réel de l'utilisateur sans dépendre de la variable d'environnement?

edit:
Voici un moyen de trouver le répertoire utilisateur sous Windows en lisant la base de registre,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

edit:
Un moyen de trouver le répertoire d'accueil de Windows en utilisant pywin32,

from win32com.shell import shell,shellcon
home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)

4voto

ring bearer Points 8369

Vraiment, un changement dans la variable d'environnement indique que le répertoire utilisateur doit être modifié. Ainsi, chaque programme/script doit avoir le nouveau répertoire utilisateur en contexte; les conséquences incombent à la personne qui l'a modifié. Je resterais toujours avec home = os.getenv('USERPROFILE') or os.getenv('HOME')

exactement ce qui est requis?

4voto

Julien Spronck Points 9720

Je réalise que c'est une vieille question qui a déjà été répondue mais j'ai pensé ajouter mon grain de sel. La réponse acceptée ne fonctionnait pas pour moi. Je devais trouver le répertoire de l'utilisateur et je voulais que cela fonctionne avec et sans sudo. Sur Linux, mon répertoire utilisateur est "/home/someuser" mais mon répertoire root est "/root/". Cependant, sur mon Mac, le répertoire utilisateur est "/Users/someuser". Voici ce que j'ai fini par faire:

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

Cela a fonctionné à la fois avec et sans sudo sur Mac et Linux.

1voto

Axel Schneider Points 11

Obtenir les noms des dossiers utilisateur (traduits) sur 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)

0voto

Jakob Borg Points 10869

Sous Linux et d'autres UNIXoïdes, vous pouvez toujours jeter un œil dans /etc/passwd. Le répertoire personnel est le sixième champ séparé par des deux-points. Aucune idée de comment faire mieux que la variable d'environnement sur Windows cependant. Il y aura un appel système pour cela, mais s'il est disponible depuis Python, ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X