sumar sistema saber restar obtener hora fechas fecha con clase capturar actual python portability username

sistema - ¿Hay una forma portátil de obtener el nombre de usuario actual en Python?



saber la hora con python (12)

¿Existe una forma portátil de obtener el nombre de usuario actual en Python (es decir, uno que funcione tanto en Linux como en Windows, al menos)? Funcionaría como os.getuid :

>>> os.getuid() 42 >>> os.getusername() ''slartibartfast''

Busqué en Google y me sorprendió no encontrar una respuesta definitiva (aunque tal vez solo lo estaba haciendo mal). El módulo pwd proporciona una forma relativamente fácil de lograr esto en, digamos, Linux, pero no está presente en Windows. Algunos de los resultados de búsqueda sugirieron que obtener el nombre de usuario en Windows puede ser complicado en ciertas circunstancias (por ejemplo, ejecutarse como un servicio de Windows), aunque no lo he verificado.


Combinación de pwd y getpass , basado en otras respuestas:

try: import pwd except ImportError: import getpass pwd = None def current_user(): if pwd: return pwd.getpwuid(os.geteuid()).pw_name else: return getpass.getuser()


Escribí el módulo plx hace algún tiempo para obtener el nombre de usuario de manera portátil en Unix y Windows (entre otras cosas): http://www.decalage.info/en/python/plx

Uso:

import plx username = plx.get_username()

(requiere extensiones win32 en Windows)



La forma más fácil de obtener el nombre de usuario actual es definitivamente el username .

pip install username

entonces:

import username print(username()) # your_username

Y también hay un username-cli , una herramienta CLI para obtener su nombre de usuario, simplemente:

pip install username-cli

entonces:

$ username # -> your username

Funciona en Linux, macOS y Windows


La mejor apuesta sería combinar os.getuid() con pwd.getpwuid() :

import os import pwd def get_username(): return pwd.getpwuid( os.getuid() )[ 0 ]

Consulte los documentos pwd para más detalles:

http://docs.python.org/library/pwd.html


Mira módulo getpass

import getpass getpass.getuser() ''kostya''

Disponibilidad: Unix, Windows

ps Por comentario a continuación " esta función analiza los valores de varias variables de entorno para determinar el nombre de usuario. Por lo tanto, no se debe confiar en esta función para fines de control de acceso (o posiblemente cualquier otro propósito, ya que permite a cualquier usuario hacerse pasar por otra persona). ) " .


Para UNIX, al menos, esto funciona ...

import commands username = commands.getoutput("echo $(whoami)") print username

edición: acabo de buscarlo y esto funciona en Windows y UNIX:

import commands username = commands.getoutput("whoami")

En UNIX devuelve su nombre de usuario, pero en Windows, devuelve el grupo de su usuario, barra diagonal, su nombre de usuario.

-

ES DECIR

UNIX devuelve: "nombre de usuario"

Windows devuelve: "dominio / nombre de usuario"

-

Es interesante, pero probablemente no sea lo ideal, a menos que esté haciendo algo en el terminal de todos modos ... en cuyo caso es probable que esté usando os.system para empezar. Por ejemplo, hace un tiempo necesitaba agregar mi usuario a un grupo, así que lo hice (esto es en Linux, claro)

import os os.system("sudo usermod -aG /"group_name/" $(whoami)") print "You have been added to /"group_name/"! Please log out for this to take effect"

Siento que es más fácil de leer y no tienes que importar pwd o getpass.

También siento que tener "dominio / usuario" podría ser útil en ciertas aplicaciones en Windows.


Para mí, el módulo os se ve mejor para la portabilidad: funciona mejor en Linux y Windows.

import os # Gives user''s home directory userhome = os.path.expanduser(''~'') print "User''s home Dir: " + userhome # Gives username by splitting path based on OS print "username: " + os.path.split(userhome)[-1]

Salida:

Windows:

Inicio del usuario Dir: C: / Users / myuser

nombre de usuario: myuser

Linux:

Inicio del usuario Dir: / root

nombre de usuario: root

No hay necesidad de instalar ningún módulo o extensión.


Probablemente puedas usar:

os.environ.get(''USERNAME'')

o

os.environ.get(''USER'')

Pero no va a ser seguro porque las variables de entorno se pueden cambiar.


Puede obtener el nombre de usuario actual en Windows pasando por la API de Windows, aunque es un poco incómodo invocar a través de Fty ctypes ( GetCurrentProcessOpenProcessTokenGetTokenInformationLookupAccountSid ).

Escribí un pequeño módulo que puede hacer esto directamente desde Python, getuser.py . Uso:

import getuser print(getuser.lookup_username())

Funciona tanto en Windows como en * nix (este último usa el módulo pwd como se describe en las otras respuestas).


Si necesita esto para obtener el directorio de inicio del usuario, a continuación se podría considerar como portátil (win32 y Linux al menos), parte de una biblioteca estándar.

>>> os.path.expanduser(''~'') ''C://Documents and Settings//johnsmith''

También puede analizar dicha cadena para obtener solo el último componente de la ruta (es decir, el nombre de usuario).

Ver: os.path.expanduser


También puedes usar:

os.getlogin()