python linux windows directory home-directory

¿Cómo encontrar el directorio de inicio del usuario real usando Python?



linux windows (8)

Creo que os.path.expanduser(path) podría ser útil.

En Unix y Windows, devuelva el argumento con un componente inicial de ~ o ~user reemplazado por el directorio de inicio de ese usuario.

En Unix, una inicial ~ es reemplazada por la variable de entorno HOME si está configurada; de lo contrario, el directorio de inicio del usuario actual se busca en el directorio de contraseñas a través del módulo incorporado pwd . Un ~user inicial se busca directamente en el directorio de contraseñas .

En Windows, HOME y USERPROFILE se usarán si están configurados; de lo contrario, se usará una combinación de HOMEPATH y HOMEDRIVE . Un ~user inicial se maneja eliminando el último componente de directorio de la ruta de usuario creada anteriormente .

Si la expansión falla o si la ruta no comienza con una tilde, la ruta se devuelve sin cambios.

Entonces podrías hacer:

os.path.expanduser(''~user'')

Veo que si cambiamos la variable de entorno HOME (linux) o USERPROFILE (windows) y ejecutamos un script python, devuelve el nuevo valor como el inicio del usuario 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 del entorno?

editar:
Aquí hay una manera de encontrar una casa de usuario en Windows leyendo en el registro,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

editar:
Una forma de encontrar ventanas en casa usando pywin32,

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


Creo que os.path.expanduser(path) es la mejor respuesta a su pregunta, pero hay una alternativa que vale la pena mencionar en el mundo de Unix: el paquete pwd . p.ej

import os, pwd pwd.getpwuid(os.getuid()).pw_dir


En Linux y otros UNIXoids siempre puedes echar un vistazo en /etc/passwd . El directorio de inicio es el sexto campo separado por el colon que hay. Sin embargo, no hay idea de cómo hacerlo mejor que la variable de entorno en Windows. Habrá una llamada al sistema, pero si está disponible desde Python, ...


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 funcionó para mí. Necesitaba encontrar el directorio de usuario 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 usuario 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ó tanto con sudo como sin él en Mac y Linux.


Para ventanas;

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

le dará un control del directorio de inicio del usuario actual y

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

le dará un control para el archivo debajo;

C:/Users/urUserName/Documents/myfile.txt


Realmente, un cambio en la variable de entorno indica que el hogar debe ser cambiado. 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?


home_folder = os.getenv(''HOME'')

Esto debería funcionar en Windows y Mac OS también, funciona bien en Linux.


from pathlib import * str(Path.home())

funciona en Python 3.5 y superior. Path.home() devuelve un objeto Path que proporciona una API me resulta muy útil.