Python:查找给定用户名/组名的uid/gid(用于os.chown)

77 投票
2 回答
53588 浏览
提问于 2025-04-15 11:24

有没有什么好的方法可以用Python找到某个用户名或组名对应的uid(用户ID)和gid(组ID)?我需要用os.chown来设置文件的拥有者,而不是用字母形式的名字,而是需要这些数字ID。

[快速说明]:getpwnam这个函数很好用,但在Windows上不可用,所以这里有一些代码可以创建一些替代方案,让你在Windows和Unix系统上都能运行相同的代码。

try:
    from pwd import getpwnam
except:
    getpwnam = lambda x: (0,0,0)
    os.chown = lambda x, y, z: True
    os.chmod = lambda x, y: True
    os.fchown = os.chown
    os.fchmod = os.chmod

2 个回答

3

试着帮助大家更清楚地理解之前的例子。

使用 pwdgrp 这两个模块。

from pwd import getpwnam
from grp import getgrnam

在你的代码中,如果需要提取 namegroup 的 UID(用户ID),可以使用以下内容。

注意:user_namegroup_name 是占位符。请用你实际想要的名字替换它们。

getpwnam('user_name').pw_uid # Returns UID only
getgrnam('group_name').gr_gid # Returns GID only

注意:getgrnam 会返回一个叫做 grp.struct_group 的类,而 getpwnam 会返回一个叫做 pwd.struct_passwd 的类。正如之前提到的,你可以通过索引(比如 getpwnam('user_name')[2])或者通过点号表示法来访问这些结构中的ID,就像上面的例子所示。

117

使用 pwdgrp 这两个模块:

from pwd import getpwnam  

print getpwnam('someuser')[2]
# or
print getpwnam('someuser').pw_uid
print grp.getgrnam('somegroup')[2]

撰写回答