假设我有一个已打开文件的列表(实际上是文件编号):
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是一个整数.它不是文件描述符.很抱歉让您对名称感到困惑,但代码不言自明.
我对此感到愤怒,我认为是因为我选择了fd文件编号.我刚检查了文档:
此模块中的所有函数都将文件描述符fd作为其第一个参数.这可以是整数文件描述符,例如sys.stdin.fileno()返回的文件描述符,也可以是文件对象,例如sys.stdin本身,它提供了一个返回真正文件描述符的fileno().
所以fd确实是一个整数.它也可以是文件对象,但在一般情况下,fd它没有.name.
根据这个答案:
for fd in get_open_fds():
print fd, os.readlink('/proc/self/fd/%d' % fd)
Run Code Online (Sandbox Code Playgroud)