复制文件句柄,以便有两个独立的句柄指向同一个文件。

5
我有一个Python程序,它执行以下操作:
  • 它以文件列表作为输入
  • 它多次迭代这个列表,每次都打开并关闭这些文件
我希望在开始时打开每个文件,并在迭代文件时复制每个文件句柄。本质上,这将采用文件句柄的复制操作,允许多个句柄独立地遍历同一个文件。之所以想要这样做,是因为在Unix系统上,如果程序获取了文件句柄,然后相应的文件被删除,程序仍然能够读取该文件。如果我尝试在每次迭代中通过名称重新打开文件,则文件可能已被重命名或删除,因此无法正常工作。如果我尝试使用f.seek(0),那么可能会影响到另一个线程/生成器/迭代器。
希望我的问题清楚明了,并想知道是否有一种方法可以实现这一点。

我认为你太担心了,为什么另一个程序会随机从Python中删除你正在使用的文件呢?而且,通常情况下,如果文件在某个程序中打开,它一般不会被删除或重命名。 - crazyGamer
1个回答

0

如果你真的想要获取文件句柄的副本,你需要使用 POSIX 的 dup 系统调用。在 Python 中,可以通过使用 os.dup 来访问 - 查看文档。如果你有一个文件 对象(例如从调用 open() 获得),那么你需要调用 fileno() 方法来获取文件描述符。

因此,整个代码将如下所示:

with open("myfile") as f:
    fd = f.fileno()       # get descriptor
    fd2 = os.dup(fd)      # duplicate descriptor
    f2 = os.fdopen(fd2)   # get corresponding file object

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接