7

可能重复:
检查在 Python 中打开了哪些文件

你好,

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

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

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

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

谢谢

4

3 回答 3

6

lsof, /proc/pid/fd/

于 2010-07-30T10:41:31.873 回答
2

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

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

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

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

于 2010-07-30T10:45:54.097 回答
0

如果您使用的是 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 任务管理器终止进程仍然将数据写入文件。

于 2010-07-30T13:31:46.027 回答