从文件编号中获取文件对象

dan*_*ast 7 python file

假设我有一个已打开文件的列表(实际上是文件编号):

import resource
import fcntl

def get_open_fds():
    fds = []
    soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
    for fd in range(3, soft):
        try:
            flags = fcntl.fcntl(fd, fcntl.F_GETFD)
        except IOError:
            continue
        fds.append(fd)
    return fds
Run Code Online (Sandbox Code Playgroud)

现在我想获取这些文件的名称.我怎样才能做到这一点?

编辑

只是为了澄清,对于那些低估这个:fd是一个整数.它不是文件描述符.很抱歉让您对名称感到困惑,但代码不言自明.

EDIT2

我对此感到愤怒,我认为是因为我选择了fd文件编号.我刚检查了文档:

此模块中的所有函数都将文件描述符fd作为其第一个参数.这可以是整数文件描述符,例如sys.stdin.fileno()返回的文件描述符,也可以是文件对象,例如sys.stdin本身,它提供了一个返回真正文件描述符的fileno().

所以fd确实是一个整数.它也可以是文件对象,但在一般情况下,fd它没有.name.

geo*_*org 6

根据这个答案:

for fd in get_open_fds():
    print fd, os.readlink('/proc/self/fd/%d' % fd)
Run Code Online (Sandbox Code Playgroud)

  • 实际上,这是给我文件名.我需要的实际上是文件对象,以便我可以访问该文件的所有属性.这可能吗? (2认同)