web-dev-qa-db-ja.com

pythonでファイルまたはディレクトリの所有者を見つける方法

Pythonにファイルまたはディレクトリの所有者を見つけるための関数またはメソッドが必要です。

関数は次のようになります。

>>> find_owner("/home/somedir/somefile")
owner3
27
ramdaz

私は本当にpython=男ではありませんが、これをうまく上げることができました:

from os import stat
from pwd import getpwuid

def find_owner(filename):
    return getpwuid(stat(filename).st_uid).pw_name
59
asveikau

使用したい 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番号(たとえば、ルートの場合は0)を返すことに注意してください。

15
Kurt

私は最近これに遭遇し、所有者のユーザーおよびグループ情報を取得しようとしていたので、私が思いついたものを共有したいと思いました。

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
    )
5
Will

以下は、ファイルの所有者を見つける方法を示すコード例です。

#!/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
unutbu

os.stat を参照してください。 st_uidは、所有者のユーザーIDです。次に、それを名前に変換する必要があります。これを行うには、 pwd.getpwuid を使用します。

3
Craig McQueen