【问题标题】:List all currently open file handles? [duplicate]列出所有当前打开的文件句柄? [复制]
【发布时间】:2011-03-23 04:22:42
【问题描述】:

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

你好,

是否可以获得所有当前打开的文件句柄的列表,我假设它们存储在环境中的某个地方。

我对 thisis 函数很感兴趣,因为我想安全地处理出现致命错误时打开的所有文件,即关闭文件句柄并用原始文件替换可能损坏的文件。

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

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

谢谢

【问题讨论】:

标签: python linux filehandle


【解决方案1】:

lsof, /proc/pid/fd/

【讨论】:

【解决方案2】:

这样做的不错方法是修改您的代码以跟踪它何时打开文件:

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

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

可能有一个令人作呕、肮脏的黑客攻击涉及垃圾收集器或查看__dict__ 或其他东西,但你不想这样做,除非你绝对非常认真地必须

【讨论】:

    【解决方案3】:

    如果您使用的是 python 2.5+,则可以使用 with 关键字(尽管 2.5 需要 `from 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 任务管理器杀死进程仍然将数据写入文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多