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

Есть ли портативный способ получить текущее имя пользователя в 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 :

Я гуглил вокруг и был удивлен, что не нашел окончательного ответа (хотя, возможно, я просто плохо гуглил). Модуль 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 :

Я 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() в качестве аргумента строку, оставшуюся после удаления пробелов, то узнаем длину этой строки:

Источник

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

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

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

15 ответов

Посмотрите на модуль 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 подход, основанный на других ответах:

psutil предоставляет переносимый способ, который не использует переменные среды, такие как getpass решение. Он менее подвержен проблемам с безопасностью и, вероятно, должен быть принятым ответом на сегодняшний день.

Под капотом это объединяет getpwuid основанный на unix и GetTokenInformation метод для Windows.

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

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

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

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

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

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *