Как мне найти ID пользователя по логину (Python под * NIX) - PullRequest
11 голосов
/ 17 ноября 2008

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

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

Ответы [ 2 ]

20 голосов
/ 17 ноября 2008

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

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

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

5 голосов
/ 17 ноября 2008

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

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

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

...