我需要Python中的函数或方法来查找文件或目录的所有者。
该功能应该是:
>>> find_owner("/home/somedir/somefile")
owner3
答案 0 :(得分:55)
我不是一个蟒蛇人,但我能够鞭打它:
from os import stat
from pwd import getpwuid
def find_owner(filename):
return getpwuid(stat(filename).st_uid).pw_name
答案 1 :(得分:15)
您想使用os.stat()
:
os.stat(path)
Perform the equivalent of a stat() system call on the given path.
(This function follows symlinks; to stat a symlink use lstat().)
The return value is an object whose attributes correspond to the
members of the stat structure, namely:
- st_mode - protection bits,
- st_ino - inode number,
- st_dev - device,
- st_nlink - number of hard links,
- st_uid - user id of owner,
- st_gid - group id of owner,
- st_size - size of file, in bytes,
- st_atime - time of most recent access,
- st_mtime - time of most recent content modification,
- st_ctime - platform dependent; time of most recent metadata
change on Unix, or the time of creation on Windows)
获取所有者UID的用法示例:
from os import stat
stat(my_filename).st_uid
但请注意,stat
返回用户ID号(例如,root表示0),而不是实际用户名。
答案 2 :(得分:6)
这是一个古老的问题,但是对于那些正在寻找使用Python 3更简单的解决方案的人来说。
您也可以使用Path
中的pathlib
来解决此问题,方法是调用Path
的{{1}}和owner
方法,如下所示:>
group
因此,在这种情况下,方法可能如下:
from pathlib import Path
path = Path("/path/to/your/file")
owner = path.owner()
group = path.group()
print(f"{path.name} is owned by {owner}:{group}")
答案 3 :(得分:4)
以下是一些示例代码,展示了如何找到文件的所有者:
#!/usr/bin/env python
import os
import pwd
filename = '/etc/passwd'
st = os.stat(filename)
uid = st.st_uid
print(uid)
# output: 0
userinfo = pwd.getpwuid(st.st_uid)
print(userinfo)
# output: pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0,
# pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')
ownername = pwd.getpwuid(st.st_uid).pw_name
print(ownername)
# output: root
答案 4 :(得分:3)
见os.stat。它会为您提供st_uid
,即所有者的用户ID。然后你必须将其转换为名称。为此,请使用pwd.getpwuid。
答案 5 :(得分:3)
我最近偶然发现了这一点,希望获得所有者用户和群组信息,所以我想我会分享我的想法:
import os
from pwd import getpwuid
from grp import getgrgid
def get_file_ownership(filename):
return (
getpwuid(os.stat(filename).st_uid).pw_name,
getgrgid(os.stat(filename).st_gid).gr_name
)