Как мне найти пользователя по логину (Python под *Никс)


Мне нужно настроить свой процесс на запуск под 'nobody', я нашел ОС.setuid (), но как найти uid, если у меня есть login?

Я обнаружил, что uids находятся в /etc / passwd, но, возможно, есть более пифонический способ, чем сканирование /etc/passwd. Кто-нибудь?

2 11

2 ответа:

Возможно, вы захотите взглянуть на модуль pwd в python stdlib, например:

import pwd
pw = pwd.getpwnam("nobody")
uid = pw.pw_uid

Он использует /etc / passwd (ну, технически он использует posix C API, поэтому я предполагаю, что он мог бы работать на ОС, если бы он не использовал /etc / passwd, но выставил необходимые функции), но чище, чем разбирать его вручную

Никогда не сканируйте напрямую /etc/passwd.

Например, в системе Linux, которую я администрирую, учетные записи пользователей находятся не на /etc/passwd, а на сервере LDAP.

Правильный способ заключается в использовании getpwent/getgrent и, связанные с функциями (как в @TFKyle ответ), что позволит получить информацию о правильном пути для каждой системы (в Linux с glibc, он читает /etc/nsswitch.conf, чтобы знать, какие НСС динамические библиотеки для загрузки, чтобы получить информацию).