Python 从文件描述符 int 获取文件路径(从 os.open 返回)
Python get file path from a file descriptor int (as returned from os.open)
我正在使用 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
...
如何获取描述符指向的原始文件路径?
既然这样似乎可以满足需要,我就post暂时将其作为答案。可以通过 f.buffer
和 f.buffer.raw
访问底层对象(不是问题中提到的惊喜有点取决于使用的 Python 版本,在 v2 中这看起来不同),但这仍然无济于事访问使用顶部打开文件的文件名。注意:这也可能发生在调用进程中,并且描述符可能已被 python 进程继承。
不确定是否有更好、更便携的方法,但可以查询 OS 并且在 U*X 类系统上,一种现成的方法是引用 procfs
结构,即上面的例子:
os.readlink(f"/proc/self/fd/{fh}")
仍然不是一个完全微不足道的问题。描述符可能仍处于打开和使用状态,而底层文件(名称;文件系统引用)已被删除。
我正在使用 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
...
如何获取描述符指向的原始文件路径?
既然这样似乎可以满足需要,我就post暂时将其作为答案。可以通过 f.buffer
和 f.buffer.raw
访问底层对象(不是问题中提到的惊喜有点取决于使用的 Python 版本,在 v2 中这看起来不同),但这仍然无济于事访问使用顶部打开文件的文件名。注意:这也可能发生在调用进程中,并且描述符可能已被 python 进程继承。
不确定是否有更好、更便携的方法,但可以查询 OS 并且在 U*X 类系统上,一种现成的方法是引用 procfs
结构,即上面的例子:
os.readlink(f"/proc/self/fd/{fh}")
仍然不是一个完全微不足道的问题。描述符可能仍处于打开和使用状态,而底层文件(名称;文件系统引用)已被删除。