如何通过登录找到userid(Python下*NIX)

Sla*_*a V 11 python unix linux process-management

我需要将我的进程设置为在'nobody'下运行,我找到了os.setuid(),但是我怎么找到uid我的login

我发现uid在/ etc/passwd中,但也​​许比扫描/ etc/passwd有更多的pythonic方式.任何人?

TFK*_*yle 20

您可能想要查看python stdlib 中的pwd模块,例如:

import pwd
pw = pwd.getpwnam("nobody")
uid = pw.pw_uid
Run Code Online (Sandbox Code Playgroud)

它使用/ etc/passwd(好吧,技术上它使用posix C API,所以我想如果它不使用/ etc/passwd但它暴露了所需的函数,它可能在OS上工作)但比手动解析它更干净


Ces*_*arB 5

千万不要直接扫描/etc/passwd.

例如,在我管理的Linux系统上,用户帐户不在/etc/passwd,而是在LDAP服务器上.

正确的方法是使用getpwent/ getgrent和相关的C函数(如在@ TFKyle的答案中),它将获得有关每个系统的正确方法的信息(在Linux glibc上,它读取/etc/nsswitch.conf以了解要加载哪些NSS动态库以获取信息).