Python get username linux

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

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

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

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

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

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

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

Читайте также:  Microsoft mouse and keyboard center windows 10

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Samsung ml 2851nd драйвер windows 10

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

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

Источник

Is there a portable way to get the current username in Python?

Is there a portable way to get the current user’s username in Python (i.e., one that works under both Linux and Windows, at least). It would work like os.getuid :

I googled around and was surprised not to find a definitive answer (although perhaps I was just googling poorly). The pwd module provides a relatively easy way to achieve this under, say, Linux, but it is not present on Windows. Some of the search results suggested that getting the username under Windows can be complicated in certain circumstances (e.g., running as a Windows service), although I haven’t verified that.

14 Answers 14

Look at getpass module

Availability: Unix, Windows

p.s. Per comment below «this function looks at the values of various environment variables to determine the user name. Therefore, this function should not be relied on for access control purposes (or possibly any other purpose, since it allows any user to impersonate any other).«

You best bet would be to combine os.getuid() with pwd.getpwuid() :

Refer to the pwd docs for more details:

You can also use:

You can probably use:

But it’s not going to be safe because environment variables can be changed.

These might work. I don’t know how they behave when running as a service. They aren’t portable, but that’s what os.name and if statements are for.

If you are needing this to get user’s home dir, below could be considered as portable (win32 and linux at least), part of a standard library.

Also you could parse such string to get only last path component (ie. user name).

To me using os module looks the best for portability: Works best on both Linux and Windows.

No need of installing any modules or extensions.

Combined pwd and getpass approach, based on other answers:

psutil provides a portable way that doesn’t use environment variables like the getpass solution. It is less prone to security issues, and should probably be the accepted answer as of today.

Under the hood, this combines the getpwuid based method for unix and the GetTokenInformation method for Windows.

For UNIX, at least, this works.

edit: I just looked it up and this works on Windows and UNIX:

On UNIX it returns your username, but on Windows, it returns your user’s group, slash, your username.

UNIX returns: «username»

Windows returns: «domain/username»

It’s interesting, but probably not ideal unless you are doing something in the terminal anyway. in which case you would probably be using os.system to begin with. For example, a while ago I needed to add my user to a group, so I did (this is in Linux, mind you)

Читайте также:  Анонимные браузеры для линукс

I feel like that is easier to read and you don’t have to import pwd or getpass.

I also feel like having «domain/user» could be helpful in certain applications in Windows.

Источник

How to find the real user home directory using python?

I see that if we change the HOME(linux) or USERPROFILE(windows) environmental variable and run a python script, it returns the new value as the user home when I tried, os.environ[‘HOME’] os.exp

Is there any way to find the real user home directory without relying on the environmental variable?

edit:
Here is a way to find userhome in windows by reading in the registry,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

edit:
One way to find windows home using pywin32,

user It takes you to home directory of current user. On windows have no idea.

9 Answers 9

On Unix and Windows, return the argument with an initial component of

user replaced by that user‘s home directory.

On Unix, an initial

is replaced by the environment variable HOME if it is set; otherwise the current user’s home directory is looked up in the password directory through the built-in module pwd . An initial

user is looked up directly in the password directory.

On Windows, HOME and USERPROFILE will be used if set, otherwise a combination of HOMEPATH and HOMEDRIVE will be used. An initial

user is handled by stripping the last directory component from the created user path derived above.

If the expansion fails or if the path does not begin with a tilde, the path is returned unchanged.

Источник

Generating username using python

I am attending a beginner course and I am very new to programming. I need to know of a function which generates a username using the first letter of someone’s name, the first three letters of a person’s surname and a 3 digit number without spaces. So far I have this:

The output I get is from using a name like John Wayne is:

What I want to know is how to change my code so I get something like:

4 Answers 4

You might be better off using split() to break the user’s name into parts and then extracting from there. This will let you check that the user has entered at least a two word name, and you can also handle the case that someone enters one or more middle names or initials:

Should a surname be less than 2 characters long (not uncommon), the name is left padded with x characters.

Replace this line:

What about this:

Not the answer you’re looking for? Browse other questions tagged python python-3.x or ask your own question.

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.10.8.40416

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

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