Есть ли портативный способ получить текущее имя пользователя в Python? - PullRequest
540 голосов
/ 09 мая 2009

Существует ли переносимый способ получения имени пользователя текущего пользователя в Python (т. Е. Тот, который работает как в Linux, так и в Windows, по крайней мере). Это будет работать как os.getuid:

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

Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль pwd обеспечивает относительно простой способ достижения этого, скажем, в Linux, но его нет в Windows. Некоторые результаты поиска показали, что получение имени пользователя в Windows может быть сложным в определенных обстоятельствах (например, запуск в качестве службы Windows), хотя я этого не проверял.

Ответы [ 12 ]

3 голосов
/ 20 ноября 2013

Вы можете получить текущее имя пользователя в Windows, пройдя через Windows API, хотя вызывать его немного через FFI ctypes ( GetCurrentProcess OpenProcessToken GetTokenInformation LookupAccountSid ).

Я написал небольшой модуль, который может сделать это прямо из Python, getuser.py . Использование:

import getuser
print(getuser.lookup_username())

Работает как в Windows, так и в * nix (последний использует модуль pwd, как описано в других ответах).

0 голосов
/ 13 мая 2019

Использование только стандартных библиотек Python:

from os import environ,getcwd
getUser = lambda: environ["USERNAME"] if "C:" in getcwd() else environ["USER"]
user = getUser()

Работает в Windows или Linux

В качестве альтернативы, вы можете удалить одну строку с немедленным вызовом:

from os import environ,getcwd
user = (lambda: environ["USERNAME"] if "C:" in getcwd() else environ["USER"])()
...