列出所有当前打开的文件句柄?

时间:2010-07-30 10:18:00

标签: python linux filehandle

  

可能重复:
  check what files are open in Python

您好,

是否可以获取所有当前打开的文件句柄的列表,我认为它们存储在环境中的某个位置。

我对theis函数感兴趣,因为我想安全地处理在引发致命错误时打开的任何文件,即关闭文件句柄并用原始文件替换可能已损坏的文件。

我有处理工作但不知道哪些文件句柄是打开的,我无法实现这个想法。

顺便说一句,当初始化文件句柄时,是否可以通过另一个导入的方法继承它?

谢谢

3 个答案:

答案 0 :(得分:5)

lsof,/ proc / pid / fd /

答案 1 :(得分:3)

执行此操作的 nice 方法是修改代码以跟踪打开文件的时间:

def log_open( *args, **kwargs ):
    print( "Opening a file..." )
    print( *args, **kwargs )
    return open( *args, **kwargs )

然后,使用log_open代替open打开文件。你甚至可以做一些更hacky的事情,比如修改File类来记录自己。这在上面的链接问题中有所涉及。

可能有一个恶心,肮脏的黑客涉及垃圾收集器或查看__dict__或其他东西,但你不想这样做,除非你绝对真正认真必须

答案 2 :(得分:0)

如果你使用的是python 2.5+,你可以使用with关键字(虽然2.5需要来自 future import with_statement)

with open('filename.txt', 'r') as f:
    #do stuff here
    pass
#here f has been closed and disposed properly - even with raised exceptions

我不知道什么样的灾难性失败需要点燃with声明,但我认为这是一个非常糟糕的声明。在WinXP上,我的快速不科学的测试:

import time
with open('test.txt', 'w') as f:
   f.write('testing\n')
   while True:
       time.sleep(1)

然后使用Windows任务管理器终止进程仍将数据写入文件。