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

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

你好,

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

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

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

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

谢谢

Solutions Collecting From Web of "列出当前打开的文件句柄?"

这样做的方法是修改你的代码来跟踪它何时打开一个文件:

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

然后,使用log_open而不是打开文件。 你甚至可以做更多的事情,比如修改File类来记录自己。 这在上面的链接问题中已经介绍过了。

有可能是一个恶意的,肮脏的黑客入侵垃圾收集器或寻找__dict__什么的,但你不想这样做,除非你真的真的认真必须

lsof,/ proc / pid / fd /

如果你正在使用python 2.5+,你可以使用with关键字(尽管2.5 将来需要从“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 

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

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

然后用Windows任务管理器查杀进程还是把数据写入文件。