Get file object from file number

file, python

Solution

As per this answer:

for fd in get_open_fds():
    print fd, os.readlink('/proc/self/fd/%d' % fd)

Problem

Let's say I have a list of the opened files (actually, of the file numbers): ``` 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 ``` Now I would like to get the names of those files. How can I do this? EDIT Just to clarify, for those downvoting this: fd is an integer. It is NOT a filedescriptor. Sorry for confusing you with the name, but the code is self-explanatory. EDIT2 I am getting flamed about this, I think because of my choice of `fd` to mean file number. I just checked the documentation: All functions in this module take a file descriptor fd as their first argument. This can be an integer file descriptor, such as returned by sys.stdin.fileno(), or a file object, such as sys.stdin itself, which provides a fileno() which returns a genuine file descriptor. So `fd` is indeed an integer. It can also be a file object but, in the general case, `fd` has not `.name`.

Original source

Related problems