2009-05-13 4 views
26

¿Cuál es la mejor manera de descubrir al usuario que ejecuta un proceso de python?whoami en python

que podía hacer esto:

name = os.popen('whoami').read() 

Pero eso tiene que iniciar un proceso completamente nuevo.

os.environ["USER"] 

funciona a veces, pero a veces esa variable de entorno no está configurada.

Respuesta

18

Esto debería funcionar en Unix.

import os 
print os.getuid() # numeric uid 
import pwd 
print pwd.getpwuid(os.getuid()) # full /etc/passwd info 
+0

Esta solución sólo funciona en Unix ver http://docs.python.org/library/pwd.html?highlight=pwd –

+0

funciona en mi máquina Linux, que tenía la misma respuesta que éste, pero voy a borrarlo como yo estaba 2 minutos más tarde ;-) – ChristopheD

+0

getpass.getuser() utiliza este enfoque como una alternativa si no puede encontrar el nombre de usuario en las variables de entorno. –

56
import getpass 
print getpass.getuser() 

Consulte la documentación del módulo getpass.

getpass.getuser()

retorno del “nombre de usuario” del usuario. Disponibilidad: Unix, Windows.

Esta función comprueba la variables de entorno LOGNAME, USER, LNAME y USERNAME, en orden, y devuelve el valor de la primera que se fija a una cadena no vacía. Si no están configurados, el nombre de inicio de sesión de la base de datos de contraseñas se devuelve en los sistemas que admiten el módulo pwd, ; de lo contrario, se genera una excepción.

+1

Eso es genial, no sabía eso. –

+6

genial, pero cualquiera puede manipular estas variables. NUNCA confíe en esto como una forma segura de obtener el nombre de usuario del usuario. usted ha sido advertido. – Cinder