как узнать имя пользователя windows python
Есть ли портативный способ получить текущее имя пользователя в Python?
Существует ли портативный способ получить имя пользователя текущего пользователя в Python (то есть тот, который работает как в Linux, так и в Windows, по крайней мере). Это будет работать как os.getuid :
Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль pwd обеспечивает относительно простой способ достижения этой цели. под, скажем, Linux, но его нет в Windows. Некоторые результаты поиска показали, что получение имени пользователя в Windows может быть сложным в определенных обстоятельствах (например, запуск в качестве службы Windows), хотя я этого не проверял.
12 ответов
Доступность: Unix, Windows
Постскриптум В комментариях ниже « эта функция просматривает значения различных переменных среды для определения имени пользователя. Поэтому на эту функцию не следует полагаться в целях контроля доступа (или, возможно, для любой другой цели, поскольку она позволяет любому пользователю выдавать себя за другого»). любой другой). «
Используя только стандартные библиотеки Python:
Работает на Windows, Mac или Linux
Кроме того, вы можете удалить одну строку с немедленным вызовом:
Некоторое время назад я написал модуль plx для переноса имени пользователя в Unix и Windows (среди прочего): http://www.decalage.info/en/python/plx
(для Windows требуются расширения win32)
Вы также можете использовать:
Вы, вероятно, можете использовать:
Но это не будет безопасным, потому что переменные среды могут быть изменены.
Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, win32 и linux), частью стандартной библиотеки.
Также вы можете проанализировать такую строку, чтобы получить только последний компонент пути (т.е. имя пользователя).
Для меня использование os модуля выглядит лучше всего для переносимости: лучше всего работает как в Linux, так и в Windows.
Дом пользователя Dir: C: \ Users \ myuser
имя пользователя: myuser
имя пользователя: root
Нет необходимости устанавливать какие-либо модули или расширения.
Лучше всего было бы объединить os.getuid() с pwd.getpwuid() :
Обратитесь к документации по pwd для более подробной информации:
Вы можете получить текущее имя пользователя в Windows, пройдя через Windows API, хотя вызывать его немного через FFI ctypes (GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid).
Я написал небольшой модуль, который может сделать это прямо из Python, getuser.py. Применение:
изменить Я только что посмотрел, и это работает на Windows и UNIX:
В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает группу вашего пользователя, косую черту, ваше имя пользователя.
UNIX возвращает: «имя пользователя»
Windows возвращает: «домен / имя пользователя»
Мне кажется, что легче читать, и вам не нужно импортировать pwd или getpass.
Я также чувствую, что наличие «домен / пользователь» может быть полезным в некоторых приложениях в Windows.
Есть ли портативный способ получить текущее имя пользователя в Python?
Существует ли портативный способ получить имя пользователя текущего пользователя в Python (т. Е. Тот, который работает как в Linux, так и в Windows, по крайней мере). Это будет работать так os.getuid :
Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль pwd обеспечивает относительно простой способ достижения этого, скажем, в Linux, но его нет в Windows. Некоторые результаты поиска показали, что получение имени пользователя в Windows может быть сложным в определенных обстоятельствах (например, запуск в качестве службы Windows), хотя я этого не проверял.
Посмотрите на модуль getpass
Доступность: Unix, Windows
ps На комментарий ниже » эта функция просматривает значения различных переменных среды для определения имени пользователя. Поэтому на эту функцию не следует полагаться в целях контроля доступа (или, возможно, в любых других целях, поскольку она позволяет любому пользователю выдавать себя за любое другое ). «
Лучше всего было бы сочетать os.getuid() с pwd.getpwuid() :
Обратитесь к документации по pwd для более подробной информации:
Вы также можете использовать:
Вы, вероятно, можете использовать:
Но это не будет безопасным, потому что переменные среды могут быть изменены.
Это может сработать. Я не знаю, как они ведут себя при работе в качестве службы. Они не переносимы, но для этого os.name и if нужны заявления.
Если вам это нужно, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (по крайней мере, win32 и linux), частью стандартной библиотеки.
Также вы можете проанализировать такую строку, чтобы получить только последний компонент пути (т.е. имя пользователя).
Для меня использование os модуля выглядит лучше всего для переносимости: лучше всего работает как на Linux, так и на Windows.
Дом пользователя Dir: C: \ Users \ myuser
имя пользователя: myuser
имя пользователя: root
Нет необходимости устанавливать какие-либо модули или расширения.
Совмещенный pwd и getpass подход, основанный на других ответах:
редактировать: я только что посмотрел, и это работает на Windows и UNIX:
В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает группу вашего пользователя, косую черту, ваше имя пользователя.
UNIX возвращает: «имя пользователя»
Windows возвращает: «домен / имя пользователя»
Мне кажется, что это легче читать, и вам не нужно импортировать pwd или getpass.
Я также чувствую, что наличие «домен / пользователь» может быть полезным в некоторых приложениях в Windows.
Есть ли переносимый способ получить текущее имя пользователя в Python?
Есть ли переносимый способ получить текущее имя пользователя пользователя в 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
Ответ 6
Если вам нужно это, чтобы получить домашний каталог пользователя, ниже можно считать переносимым (win32 и linux как минимум), частью стандартной библиотеки.
Также вы можете проанализировать такую строку, чтобы получить только последний компонент пути (то есть имя пользователя).
Ответ 7
Пользовательский дом Dir: C:\Users\myuser
имя пользователя: myuser
имя пользователя: root
Не нужно устанавливать какие-либо модули или расширения.
Ответ 8
Ответ 9
Для UNIX, по крайней мере, это работает.
изменить Я просто просмотрел его, и это работает в Windows и UNIX:
В UNIX он возвращает ваше имя пользователя, но в Windows он возвращает вашу группу пользователей, косую черту, ваше имя пользователя.
UNIX возвращает: «имя пользователя»
Windows возвращает: «domain/username»
Это интересно, но, вероятно, не идеально, если вы ничего не делаете в терминале. в этом случае вы, вероятно, используете os.system для начала. Например, некоторое время назад мне нужно было добавить моего пользователя в группу, поэтому я сделал (это в Linux, заметьте)
Мне кажется, что читать легче и, вам не нужно импортировать pwd или getpass.
Мне также кажется, что «домен/пользователь» может быть полезен в некоторых приложениях в Windows.
Ответ 10
Я написал модуль plx некоторое время назад, чтобы получить имя пользователя переносимым способом в Unix и Windows (среди прочего): http://www.decalage.info/en/python/plx
(для Windows требуется расширение win32)
Ответ 11
Вы можете получить текущее имя пользователя в Windows, пройдя через API Windows, хотя это немного громоздко для вызова через ctypes FFI (GetCurrentProcess → OpenProcessToken → GetTokenInformation → LookupAccountSid).
Я написал небольшой модуль, который может сделать это прямо из Python, getuser.py. Использование:
Ответ 12
Использование только стандартных библиотек Python:
Работает в Windows, Mac или Linux
Кроме того, вы можете удалить одну строку с помощью немедленного вызова:
Ответ 13
Работает на Linux, MacOS и Windows
Как ввести имя в Python или практикуем ввод / вывод данных
Как ввести имя в Python или практикуем ввод / вывод данных
Попрактикуемся в решении простых но интересных задач:
Как ввести имя в Python
1. Выведем запрос на получение имени
Чтобы пользователь не пребывал в растерянности при виде пустой строки, давайте попросим его ввести имя. Для этого вызовем функцию print(), которой передадим в качестве аргумента нашу просьбу:
Python послушно вывел нашу просьбу на экран:
2. Реализуем ввод имени
Теперь нам нужно разрешить пользователю вводить данные в программе. Поэтому предлагаю воспользоваться функцией input(). При вызове функции input(), программный поток останавливается до того момента, пока пользователь не введет данные через клавиатуру. Это то, что нам нужно! А чтобы была возможность использовать в дальнейшем полученные от пользователя данные, сразу же после получении имени, сохраним его в какой-нибудь переменной, например, в переменной user_name:
В среде разработки Anaconda результат работы этих двух строк выглядит так:
В вашей среде разработки окно для ввода информации может выглядеть иначе. Например, при работе в консоли, ожидание пользовательского ввода помечено мигающим прямоугольником. Однако, вид строки ввода не так важен, важно то, что программа перешла в режим ожидания ответа от пользователя!
Таким образом, мы справились с заданием и сохранили введенные пользователем данные в переменной user_name. Давайте теперь выведем имя пользователя на экран в контексте диалога:
Результат работы кода
Теперь при вводе имени «Великий Программист», на экран выводится строка:
Однако, в этом коде есть маленькая недоработка
Давайте проверим, что произойдет, если не вводить ничего, или же — ввести пробел вместо имени, и нажать «Enter»? В таком случае на экране появится некорректное приветствие:
Как это исправить?
Нам нужно добавить проверку на число введенных пользователем символов, предварительно удалив крайние пробелы. То есть нам нужно добавить условие:
Для этого мы воспользуемся циклом while (который означает «пока..» ), и конструкцией len(user_name.split()), которая возвращает длину строки без пробелов. Подробнее о работе функций split() и len() я расскажу чуть ниже, под кодом. А сейчас переведем сформулированное выше условие на язык Python:
Обратите внимание, что перед циклом while появилось объявление переменной user_name. Так как в цикле нам нужно посчитать длину строки user_name еще до того, как пользователь осуществит ввод, то создадим пустую строку user_name до вызова цикла. Так как длина этой строки равна нулю, то функция print() выведет на экран предложение познакомиться, и у пользователя появится шанс изменить длину user_name.
Подробнее о функциях split() и len():
Функция split() — удаляет пробелы в начале и в конце строки. Вызов функции split() для строки user_name осуществляется следующим образом:
Функция len() является специалистом по измерению длин в мире Python. Если мы передадим функции len() в качестве аргумента строку, оставшуюся после удаления пробелов, то узнаем длину этой строки:
Больше информации о системе Windows с Python
Получите практические, реальные навыки Python на наших ресурсах и пути
В прошлом месяце я написал сообщение о том, чтобы получить системную информацию Windows, и я упомянул в одном из моих комментариев, что был еще один скрипт, который сделал некоторые из этого, а также другие вещи, но я не мог его найти. Ну, сегодня я пошел копать для этого и нашел сценарий, который я хотел. Таким образом, мы возвращаемся по дыре кролика для некоторых советов и трюков для получения информации о прекрасном мире Windows, используя Python.
Как получить имя вашей рабочей станции
В этом разделе мы будем использовать модуль платформы, чтобы получить имя нашего компьютера. Мы на самом деле упомянули этот трюк в моем предыдущем в моей предыдущей статье, но поскольку нам нужна эта информация для следующего фрагмента, я собираюсь повторить этот трюк здесь:
Это было довольно безболезненно, верно? Только две строки кода, и у нас есть то, что нам нужно. Но есть на самом деле, по крайней мере, еще один способ получить это:
Этот фрагмент также чрезвычайно прост, хотя первый немного короче. Все, что нам нужно было сделать, это импортировать встроенный розетка Модуль и позвоните его GetHostName метод. Теперь мы готовы получить IP-адрес нашего ПК.
Как получить IP-адрес вашего ПК с Python
Мы можем использовать информацию, которую мы выбрали выше, чтобы получить IP-адрес нашего ПК:
В этом примере мы снова используем розетка Модуль, но на этот раз мы его GetHostbyName Способ и пройти во имя ПК. розетка Затем модуль вернет IP-адрес.
Вы также можете использовать Тим Золотой WMI модуль Отказ В следующем примере исходит от его замечательной кулинарной книги WMI:
Все, что он делает, если петля по установленным сетевым адаптерам и распечатает их соответствующие описания и IP-адреса.
Как получить MAC-адрес с Python
Теперь мы можем обратить наше внимание на получение MAC-адреса. Мы посмотрим на два разных способа получить его, начиная с рецепта ActiveState:
Поскольку я не писал код выше, я не буду входить в него в глубину. Тем не менее, я понимаю, что этот сценарий работает с первой проверкой, чтобы увидеть, может ли он сделать запрос ARP, который доступен только в Windows 2000 и выше. После того, как это подтвердило, он пытается использовать модуль CTYPES, чтобы получить адрес INET. После этого сделано, он проходит через некоторые вещи, которые я не понимаю, чтобы построить MAC-адрес.
Когда я впервые начал поддерживать этот код, я думал, что должен быть лучший способ получить MAC-адрес. Я думал, что, возможно, модуль WMI Tim Golden WMI или, возможно, пакет Pywin32 будет ответом. Я довольно уверен, что он дал мне следующий фрагмент или я нашел его на одном из архивов списка рассылки Python:
К сожалению, хотя этот метод работает, заметно замедлял сценарий входа в систему, поэтому я закончил использовать оригинальный метод в конце. Я думаю, что г-н Golden выпустил более новую версию модуля WMI, так что это возможно, что теперь это быстрее.
Как получить имя пользователя
Получение входа в текущее имя пользователя с Python Trivial. Все, что вам нужно, это Pywin32 пакет Отказ
Один быстрый импорт, и у нас есть имя пользователя в двух строках кода.
Как найти, какие группы пользователь в
Мы можем использовать UserID, который мы приобрели выше, чтобы узнать, какие группы это в.
Это более пугающее, чем любой из предыдущих скриптов, на которых мы смотрели, но это на самом деле довольно легко понять. Сначала мы импортируем модули или метод, который нам нужен. Далее у нас есть простая функция, которая принимает пользовательский объект в качестве своего единственного параметра. Эта функция будет включать в себя групп пользователя и добавить их в список, который затем возвращается к абонеру. Следующая часть головоломки получает основной контроллер домена, который мы используем ОС модуль для.
Мы передаем PDCName и UserID в GetObject (что является частью модуля Win32Com), чтобы наш пользовательский объект. Если это работает правильно, то мы можем получить полное имя и группы пользователя. Если он не удается, то мы ловим ошибку и попытаемся получить информацию с некоторыми функциями из модуля Win32Net. Если это также не удается, мы просто устанавливаем некоторые значения по умолчанию.
Обертывание
Надеюсь, вы узнали некоторые ценные трюки для использования в вашем собственном коде. Я использовал эти сценарии в течение нескольких лет с Python 2.4+, и они отлично работают!