我正在使用 fusepy,我需要将文件描述符转换回文件对象,以便我可以获取原始文件路径
从 fusepy 示例中,创建文件时,将返回文件描述符 - 例如:
def open(self, path, flags):
print("open:", path)
return os.open(path, flags)
返回的结果是一个整数:<class 'int'>
,值为4
在一个名为 write 的单独函数中,我需要将文件描述符反转回文件,以便我可以获取文件路径,所以我尝试了这个:
f = os.fdopen(fh)
当我检查f
类型时,我得到以下f is type: <class '_io.TextIOWrapper'>
这不是我所期望的,但快速dir(f)
显示它有一个name
属性,我认为这就是我想要的,除了name
只是4
的数字......
如何获取描述符指向的原始文件路径?
由于这似乎满足了需求,因此我暂时将其作为答案发布。人们可以通过f.buffer
和f.buffer.raw
访问底层对象(不是提到的惊喜取决于所使用的 Python 版本,在 v2 中这看起来不同(,但这仍然无助于访问顶部使用的文件名打开文件。注意:这也可能发生在调用过程中,并且描述符可能被 python 进程继承。
不确定是否有更好,更便携的方法,但是可以查询操作系统,并且在U * X之类的系统上,现成的方法是引用procfs
结构,即上面的示例:
os.readlink(f"/proc/self/fd/{fh}")
仍然不是一个完全微不足道的问题。描述符可能仍处于打开状态并使用,而底层文件(名称;文件系统引用(已被删除。