Python 从文件描述符 int 获取文件路径(从 os.open 返回)

dry*_*ast 6 python fdopen

我正在使用 fusionpy,我需要将文件描述符转换回文件对象,以便我可以获得原始文件路径

从fusepy示例中,创建文件时,会返回一个文件描述符 - 例如:

def open(self, path, flags):
    print("open:", path)
    return os.open(path, flags)
Run Code Online (Sandbox Code Playgroud)

返回的结果是一个整数:<class 'int'>其值为4

在一个名为 write 的单独函数中,我需要将文件描述符反转回文件,以便可以获得文件路径,所以我尝试了以下方法:

f = os.fdopen(fh)
Run Code Online (Sandbox Code Playgroud)

当我检查类型时,f我得到以下信息f is type: <class '_io.TextIOWrapper'>

这并不完全符合我的预期,但快速dir(f)表明它有一个name属性,我认为这就是我正在寻找的,除了name简单的数字4......

如何获取描述符指向的原始文件路径?

Ond*_* K. 7

由于这似乎满足了需要,所以我暂时将其作为答案发布。人们可以通过f.buffer和访问底层f.buffer.raw对象(不是所提到的惊喜,这在一定程度上取决于所使用的 Python 版本,在 v2 中,这看起来有所不同),但这仍然无助于访问打开文件时使用的文件名。注意:这也可能发生在调用进程中,并且描述符可能被 python 进程继承。

不确定是否有更好、更便携的方法,但是可以查询操作系统,并且在类似 U*X 的系统上,一种现成的方法是引用procfs结构,即上面的示例:

os.readlink(f"/proc/self/fd/{fh}")
Run Code Online (Sandbox Code Playgroud)

这仍然不是一个完全微不足道的问题。描述符可能仍处于打开和使用状态,而底层文件(名称;文件系统引用)已被删除。