Питон узнать имя пользователя

Есть ли переносимый способ получить текущее имя пользователя в Python?

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

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

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

ОТВЕТЫ

Ответ 1

import getpass getpass.getuser() 'kostya' 

p.s. В комментарии ниже «эта функция просматривает значения переменных среды для определения имени пользователя. Поэтому эту функцию нельзя использовать для целей контроля доступа (или, возможно, для любой другой цели, поскольку она позволяет любому пользователю выдавать себя за другое).»

Ответ 2

Лучше всего было бы объединить os.getuid() с pwd.getpwuid() :

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

Для получения дополнительной информации обратитесь к документам pwd:

Ответ 3

Вы также можете использовать:

Ответ 4

Вы, вероятно, можете использовать:

Но это не будет безопасным, потому что переменные среды могут быть изменены.

Ответ 5

Это может сработать. Я не знаю, как они ведут себя при работе в качестве службы. Они не переносимы, но для этого предназначены операторы os.name и if .

win32api.GetUserName() win32api.GetUserNameEx(. ) 

Ответ 6

Если вам нужно это, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (win32 и linux как минимум), частью стандартной библиотеки.

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

Также вы можете проанализировать такую ​​строку, чтобы получить только последний компонент пути (то есть имя пользователя).

Ответ 7

Мне, используя модуль os , лучше всего подходит для переносимости: лучше всего работает как на Linux, так и на Windows.

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

Пользовательский дом Dir: C:\Users\myuser

имя пользователя: myuser

Пользовательский дом Dir:/root

имя пользователя: root

Не нужно устанавливать какие-либо модули или расширения.

Читайте также:  Проста cms на php

Ответ 8

Комбинированный подход pwd и getpass , основанный на других ответах:

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() 

Ответ 9

Для UNIX, по крайней мере, это работает.

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

изменить Я просто просмотрел его, и это работает в Windows и UNIX:

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

В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает вашу группу пользователей, косую черту, ваше имя пользователя.

UNIX возвращает: «имя пользователя»

Windows возвращает: «domain/username»

Это интересно, но, вероятно, не идеально, если вы ничего не делаете в терминале. в этом случае вы, вероятно, используете os.system для начала. Например, некоторое время назад мне нужно было добавить моего пользователя в группу, поэтому я сделал (это в Linux, заметьте)

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" 

Мне кажется, что читать легче и, вам не нужно импортировать pwd или getpass.

Мне также кажется, что «домен/пользователь» может быть полезен в некоторых приложениях в Windows.

Ответ 10

Я написал модуль plx некоторое время назад, чтобы получить имя пользователя переносимым способом в Unix и Windows (среди прочего): http://www.decalage.info/en/python/plx

import plx username = plx.get_username() 

(для Windows требуется расширение win32)

Ответ 11

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

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

import getuser print(getuser.lookup_username()) 

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

Ответ 12

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

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

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

Кроме того, вы можете удалить одну строку с помощью немедленного вызова:

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

Ответ 13

Самый простой способ получить текущее имя пользователя — это определенно username .

import username print(username()) # your_username 

Работает на Linux, MacOS и Windows

Источник

Python: How to get domain\username for logged in user

In Python how do I get the logged in username in the domain\username format. The following just get username:

import getpass import os print(os.getlogin()) print(getpass.getuser()) 

4 Answers 4

import os domain = os.environ['userdomain'] print(domain) 

(But i see that this doest give the FQDN, but only the NetBIOS name)

Читайте также:  Php ftp get file

If you have pywin32 installed, you can call the corresponding Windows function:

import win32api win32api.GetUserNameEx(win32api.NameSamCompatible) 

Check out this MSDN page for other possible parameters and outputs.

This returns the logon session user name, which should also be available as the %USERNAME% and %USERDOMAIN% environment variables. This name almost always agrees with the user SID in the process access token, except the 3 common service accounts (i.e. SYSTEM, LOCAL SERVICE, and NETWORK SERVICE) get logged on as the machine name followed by a dollar sign (e.g. «SPAMBOX$»). That may surprise you if you’re running as a service using one of those accounts.

Should work in Python 2 and 3

import getpass import platform print(getpass.getuser()) #username print(platform.node()) #hostname 

Does Domain mean hostname? if it is, try this:

import socket socket.getfqdn() 

Domainname here represent the Active Directory (or Windows NT for dinosaurs. ) domain. It can be different from the host name.

Источник

How to make Python get the username in windows and then implement it in a script

I know that using getpass.getuser() command, I can get the username, but how can I implement it in the following script automatically? So i want python to find the username and then implement it in the following script itself. Script: os.path.join(‘..’,’Documents and Settings’,’USERNAME’,’Desktop’)) (Python Version 2.7 being used)

Are you just asking how to put the result of getpass.getuser() in place of the string ‘USERNAME’ in your command? If so, it’s as simple as it sounds: just write getpass.getuser() where you’ve written ‘USERNAME’ , and you’re done.

10 Answers 10

os.getlogin() return the user that is executing the, so it can be:

path = os.path.join(‘..’,’Documents and Settings’,os.getlogin(),’Desktop’)

path = os.path.join(‘..’,’Documents and Settings’,getpass.getuser(),’Desktop’)

If I understand what you asked.

The problem with this solution is, that you are language dependend. For example: The german windows name of «Documents and Settings» is «Dokumente und Einstellungen». The next point is, that you make another assumption about the Desktop directory. What, if you need access to the SendTo directory? On Windows XP and Windopws 7 they have totaly diffrent relativ pathes inside the userprofile. To overcome language und version dependencies, you should use call like those from win32com. Let windows give back the directoryname of the requested entity of the user (Desktop, SendTo, etc.)

You can check it in the Python IDLE whether it gives you the output, when you use the function to return the username of the user.

Читайте также:  Round function in java

Источник

Как получить имя учётки

Как получить имя файла?
Подскажите пожалуйста, есть ли возможности получить не весь путь к файлу, а только его имя? .

Как получить имя файла из формы
Здравствуйте! Есть форма, на основе некоторой модели в котором такое поле: file =.

Как получить имя слайдера и его значение
Здравствуйте! Подскажите пожалуйста, как получить в print() два переменных, одну с имением.

Как в билдере получить с сервера (MySQL 5.1, имя базы «skola», имя table «info») имя столбцов и имя строк
Доброва времены суток Как в билдере получить с сервера (MySQL 5.1, имя базы "skola", имя table.

Эксперт PythonЭксперт Java

Эксперт PythonЭксперт Java

Эксперт PythonЭксперт Java

iSmokeJC, да я читал это, там люди не правильно используют формулировки, точнее раньше такого и не было до винды 10, они не имя пользователя выводят, а имя компа = логин учётки, а есть ещё имя учётки

import os print(__import__("os").getenv('username')) print(os.getlogin())

ЦитатаСообщение от iSmokeJC Посмотреть сообщение

Лучший ответ

Сообщение было отмечено RSAX как решение

Решение

import win32api import win32net user_properties = win32net.NetUserGetInfo(None, win32api.GetUserName(), 20) print(user_properties.get("full_name"))

ЦитатаСообщение от menreiven Посмотреть сообщение

хороши звери-даже без пипа импортнулись)) спс
я так понимаю, что кроме «full_name» ещё можно что-то заполучить-где глянуть? спс

Эксперт Python

ЦитатаСообщение от RSAX Посмотреть сообщение

Полное имя учетной записи было всегда.
Первые два способа выдают стандартный username залогинившегося пользователя.

>>> print(__import__("os").getenv('username')) Garry >>> import os >>> os.getlogin() 'Garry'

Последний — через winapi — полное имя (по сути никому не нужное). Я, например, это поле никогда не заполнял и оно у меня пустое.

>>> user_properties {'name': 'Garry', 'full_name': '', 'comment': '', 'flags': 66081, 'user_id': 1000} >>>

ЦитатаСообщение от RSAX Посмотреть сообщение

Логин и имя компа это разные вещи. Если у тебя они одинаковые, то это твои проблемы. Нужно было после магазина поменять.

Получить имя процесса (такое же как имя задачи в «Диспетчере задач»)
Здравствуйте! Пишу программу, которая будет отслеживать мои действия и собирать статистику по.

Получить имя моего процесса (получить имя меня)
Работает мой код. Мне нужно получить имя моего процесса — ***.exe

Как получить имя проекта
Добрый день, я пишу игровой движок, и щас пишу шаблон для VS. Еасть конфиг файл, в котором есть.

Как получить имя переменной?
Для отладки кода появилась необходимость получать имена переменных. Это я могу сделать но только.

Как получить имя столбца
Подскажите пожалуйста как получить имя столбца таблицы, запроса и вывести его в Debug.Print

Источник

Оцените статью