Как найти идентификатор пользователя по имени пользователя (Python под * NIX)

Мне нужно настроить мой процесс на "никто", я нашел os.setuid(), но как найти uid, если у меня есть login?

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

Ответ 1

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

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

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

Ответ 2

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

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

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