Как узнать имя пользователя python windows

Обновлено: 05.07.2024

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

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

import pwd, os; print pwd.getpwuid(os.getuid()).pw_gecos или import pwd, os; print pwd.getpwuid(os.getuid()).pw_name @MattBruzek Это был пункт OP там. Он представлял, как можно вызвать такую ​​функцию, если она существует.

Посмотрите на модуль getpass

Доступность: Unix, Windows

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

Похоже, что эта функция просматривает значения различных переменных среды, чтобы определить имя пользователя. Поэтому на эту функцию не следует полагаться для целей контроля доступа (или, возможно, для любых других целей, поскольку она позволяет любому пользователю выдавать себя за любого другого). В getpass.getuser () нет ничего плохого, поскольку он не претендует на аутентификацию пользователя. Цель этой функции - определить, кем является пользователь, не спрашивая его напрямую. Это не работает, если вы сделали su. $ echo $ USER hithwen $ su julia Пароль: $ echo $ USER julia $ python >>> import getpass >>> getpass.getuser () 'hithwen' @GregHewgill поднимает очень хороший вопрос, но, действительно, поиск имени пользователя простым неаутентифицированным способом, подобным этому, имеет некоторые приложения. Мой текущий вариант использования: пометка некоторых общих ресурсов тестирования именем пользователя для легкой очистки позже. (Так что легче выяснить, чей беспорядок чей.) И я согласен с @GregHewgill в целях контроля доступа, но совершенно не согласен с «любыми другими целями» - это все равно что сказать «Не используйте $ USER в сценарии оболочки». Отличная особенность контроля доступа, но есть множество других применений, которые не связаны с аутентификацией.

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

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

В качестве альтернативы (немного приятнее читать) pwd.getpwuid(os.getuid()).pw_name . Что это делает в Windows? Возможно, можно попробовать это, и если это не удастся, вернитесь к дурацким методам 'getpass / env var'. Это правильный путь, если вам нужно получить имя пользователя как во время входа, так и без него. Этот метод в unix-подобных системах намного превосходит ответ Константина Тензина, потому что он sudo правильно обрабатывает случай. (Я знаю, что OP не просил Unix-подобные системы.)

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

В linux getlogin () возвращает имя «пользователя, вошедшего в систему на управляющем терминале процесса». Поэтому происходит сбой, когда нет управляющего терминала, например, в приложении mod_python. работает на windows . Python 3.4.1 (v3.4.1: c0e311e010fc, 18 мая 2014, 10:38:22) [MSC v.1600 32 бит (Intel)] на win32 Тип «помощь», «авторское право», «кредиты» или «лицензия» для получения дополнительной информации. >>> импорт ОС; os.getlogin () 'jrb'

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

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

Да, именно USER vs USERNAME - это то, что не является переносимым, поэтому не дает правильного ответа.

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

Этот ответ, по крайней мере, так же полезен, как и (бесполезный) 25-голосовый голос только для Unix. > "По крайней мере, так полезно" Согласен. Предположительно, правильный ответ - это сочетание двух. Если вы застряли на Python 2 в Windows, это единственный безопасный способ сделать это. Все остальные способы можно обмануть, запустив SET USERNAME=FAKE перед командой python

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

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

Чей-то домашний каталог не всегда отражает его имя пользователя. К сожалению, если вы установите переменную HOME в Windows, это вернет это значение.

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

Дом пользователя Dir: C: \ Users \ myuser

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

Дом пользователя Dir: / root

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

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

Это решение разумно, но делает некоторые предположения, которые не всегда верны. Нет ограничений, требующих, чтобы имя пользователя отображалось в пути homedir в Linux. Просто так бывает в большинстве случаев, но системный администратор может установить домашний каталог пользователя так, как ему хочется.

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

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

редактировать: я только что посмотрел, и это работает на Windows и UNIX:

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

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

Windows возвращает: «домен / имя пользователя»

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

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

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

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

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

ОТВЕТЫ

Ответ 1

Доступность: Unix, Windows

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

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

Ответ 9

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

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

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

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

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

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

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

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

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

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

Ответ 13

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

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


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


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

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

Решение

хороши звери-даже без пипа импортнулись)) спс
я так понимаю, что кроме "full_name" ещё можно что-то заполучить-где глянуть? спс Полное имя учетной записи было всегда.
Первые два способа выдают стандартный username залогинившегося пользователя.
Последний - через winapi - полное имя (по сути никому не нужное). Я, например, это поле никогда не заполнял и оно у меня пустое.
Логин и имя компа это разные вещи. Если у тебя они одинаковые, то это твои проблемы. Нужно было после магазина поменять.

Помощь в написании контрольных, курсовых и дипломных работ здесь.


Как получить имя кнопки?
Есть 5 кнопок, у всех 1 общее событие onClick, как с помощью его определить какая кнопка была.

Как Получить Имя Поля ?
Добрый день ! Помогите решить задачку. На форме много изменяемых полей Если пользователь удалит.

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

Как получить имя компьютера
Как получить имя компьютера? Если указывать %UserName% выбивает ошибка вот код procedure.


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

Как получить имя фотографии?
Добрый день подскажите пожалуйста как узнать имя фотографии? Проблема в следующем. Делаю фото.


Что­бы прос­то пос­мотреть IP-адрес и дру­гие нас­трой­ки сети, тебе при­дет­ся обра­тить­ся к коман­дной стро­ке и выпол­нить коман­ду ipconfig / all . Ситу­ация одна из самых час­тых для эни­кей­щиков и уда­лен­ных шаманов, но она хотя бы быс­тро реша­ема. Но если при­дет­ся собирать более серь­езный набор информа­ции о машине, с которой сей­час будешь работать, — без авто­мати­зации не обой­тись. Этим мы сегод­ня и зай­мем­ся.

Имей в виду, что эта прог­рамма может исполь­зовать­ся как для быс­тро­го сбо­ра информа­ции о сво­ей сис­теме, так и для кра­жи иден­тифици­рующей информа­ции с компь­юте­ра жер­твы. Мы граж­дане законо­пос­лушные, поэто­му пусть это и не пароли, но, что­бы не раз­дра­жать пра­воох­раните­лей, все тес­ты будут про­водить­ся на изо­лиро­ван­ных вир­туаль­ных машинах.

warning

Не­сан­кци­они­рован­ный дос­туп к компь­ютер­ной информа­ции — прес­тупле­ние. Ни автор, ни редак­ция жур­нала не несут ответс­твен­ности за твои дей­ствия.

Инструменты

Сна­чала давай раз­берем­ся, где будем писать код. Мож­но кодить в обыч­ном вин­довом «Блок­ноте», но мы вос­поль­зуем­ся спе­циаль­ной IDE для Python — PyCharm. Уста­нов­ка и нас­трой­ка прос­ты как два руб­ля: ска­чал уста­нов­щик, запус­тил — и кли­кай себе «Далее», пока есть такая кноп­ка.

Еще нам пот­ребу­ется Python. Я буду исполь­зовать вер­сию 3.9.0 — с ней точ­но все работа­ет.

Задачи

Да­вай сна­чала обри­суем, что мы вооб­ще пла­ниру­ем делать. Я пла­нирую собирать сле­дующую информа­цию:

  1. IP-адрес.
  2. MAC-адрес.
  3. Имя поль­зовате­ля.
  4. Тип опе­раци­онной сис­темы.
  5. Ско­рость работы сис­темы.
  6. Вре­мя.
  7. Скрин­шот.
  8. Ско­рость интернет‑соеди­нения.
  9. Мо­дель про­цес­сора.

И отправ­лять­ся это все будет пря­миком тебе в телегу через спе­циаль­ный бот.

Зачем?

На­вер­няка у тебя воз­ник воп­рос: зачем может понадо­бить­ся MAC-адрес или модель про­цес­сора? Эти парамет­ры меня­ются очень и очень ред­ко, так что прек­расно под­ходят для фин­гер­прин­тинга. Даже если поль­зователь купит более быс­трый интернет‑канал или поменя­ет часовой пояс, ты без осо­бого тру­да смо­жешь опре­делить, что уже имел дело с этим компь­юте­ром. Сто­ит пом­нить, что ров­но такие же методы исполь­зуют хит­рые рек­ламщи­ки для иден­тифика­ции поль­зовате­лей, да и раз­работ­чики три­аль­ных вер­сий прог­рамм тоже. Эта статья поможет чуть луч­ше понять, что мож­но узнать о тво­ем компь­юте­ре в пол­ностью авто­мати­чес­ком режиме, а как при­менить эту информа­цию — решать толь­ко тебе.

В этой статье мы не будем показы­вать, как сфор­мировать устой­чивый к нез­начитель­ным изме­нени­ям иден­тифика­тор, который поможет однознач­но опре­делить кон­крет­ный компь­ютер. Если тебе ста­нет инте­рес­но — пиши в ком­мента­риях, и, воз­можно, мы сде­лаем боль­шой гайд на эту тему!

Создаем основу программы

Для отправ­ки дан­ных я решил вос­поль­зовать­ся Telegram-ботом. Соз­дать его ты можешь через BotFather, а пос­ле сох­ранить token тво­его тво­рения. Пуб­ликовать его нель­зя — любой, кто получит этот токен, смо­жет зах­ватить кон­троль над тво­им ботом.

Для под­клю­чения к Bot API «телеги» нуж­ны все­го две строч­ки:

Что­бы оце­нить быс­тро­дей­ствие, мож­но написать еще пару строк. Весь даль­нейший код рас­положим меж­ду ними. Опи­сан­ное выше под­клю­чение бота уже впи­сано сюда.

Читайте также: