Veo que si cambiamos la variable de entorno HOME (linux) o USERPROFILE (windows) y ejecutamos un script de Python, devuelve el nuevo valor como el usuario en casa cuando lo intenté, os.environ ['HOME'] os.exp
¿Hay alguna forma de encontrar el directorio de inicio del usuario real sin depender de la variable de entorno?
editar:
Aquí hay una forma de encontrar el inicio de usuario en Windows leyendo en el registro,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html
editar:
una forma de encontrar Windows Home usando pywin32,
from win32com.shell import shell,shellcon
home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)
~user
lleva al directorio de inicio del usuario actual. En las ventanas no tengo ni idea.Respuestas:
Creo que
os.path.expanduser(path)
podría ser de ayuda.Entonces podrías hacer:
os.path.expanduser('~user')
fuente
'~user'
que debería funcionar en Linux y Windows (aquí no estoy 100% seguro porque no tengo Windows para probarlo;)).Creo que
os.path.expanduser(path)
es la mejor respuesta a tu pregunta, pero hay una alternativa que vale la pena mencionar en el mundo Unix: elpwd
paquete. p.ejimport os, pwd pwd.getpwuid(os.getuid()).pw_dir
fuente
from pathlib import * str(Path.home())
funciona en Python 3.5 y superior.
Path.home()
devuelve unPath
objeto que proporciona una API que encuentro muy útil.fuente
pathlib
todavía se basa en variables de entorno, por lo que esto no responde a su pregunta específica. Dado que las preguntas más generales se marcaron como duplicadas y se refieren a ellas aquí, este podría ser el mejor lugar para esta respuesta.home_folder = os.getenv('HOME')
Esto también debería funcionar en Windows y Mac OS, funciona bien en Linux.
fuente
Para ventanas;
import os homepath = os.path.expanduser(os.getenv('USERPROFILE'))
le dará un identificador para el directorio de inicio del usuario actual y
filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt'
le dará un identificador para el archivo de abajo;
fuente
Realmente, un cambio en la variable de entorno indica que se debe cambiar la vivienda. Entonces, cada programa / script debe tener el nuevo hogar en contexto; también las consecuencias dependen de la persona que lo cambió. Todavía me quedaría con
home = os.getenv('USERPROFILE') or os.getenv('HOME')
¿Qué se requiere exactamente?
fuente
Me doy cuenta de que esta es una vieja pregunta que ha sido respondida, pero pensé que agregaría mis dos centavos. La respuesta aceptada no me funcionó. Necesitaba encontrar el directorio de usuarios y quería que funcionara con y sin
sudo
. En Linux, mi directorio de usuario es "/ home / someuser" pero mi directorio raíz es "/ root /". Sin embargo, en mi Mac, el directorio de usuarios es "/ Users / someuser". Esto es lo que terminé haciendo:_USERNAME = os.getenv("SUDO_USER") or os.getenv("USER") _HOME = os.path.expanduser('~'+_USERNAME)
Esto funcionó con y sin
sudo
en Mac y Linux.fuente
_USERNAME
eraNone
. Para futuros lectores.or ""
?En Linux y otros UNIXoids siempre puede echar un vistazo
/etc/passwd
. El directorio de inicio es el sexto campo separado por dos puntos. Sin embargo, no tengo idea de cómo hacerlo mejor que la variable de entorno en Windows. Habrá una llamada al sistema, pero si está disponible en Python, ...fuente
obtener nombres de carpetas de usuario (traducidos) en 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)
fuente