2024-05-23 07:03:30 发布
网友
Possible Duplicate:check what files are open in Python
你好
是否可以获取当前打开的所有文件句柄的列表,我假定它们存储在环境中的某个位置。
我对这个函数很感兴趣,因为我想安全地处理在引发致命错误时打开的任何文件,即关闭文件句柄并用原始文件替换可能损坏的文件。
我有处理工作,但不知道什么文件句柄是开放的,我无法实现这个想法。
另外,当初始化文件句柄时,是否可以由另一个导入的方法继承?
谢谢你
这样做的好方法是修改代码以跟踪它打开文件的时间:
def log_open( *args, **kwargs ): print( "Opening a file..." ) print( *args, **kwargs ) return open( *args, **kwargs )
然后,使用log_open而不是open来打开文件。你甚至可以做一些更复杂的事情,比如修改File类来记录自己。这在上面的相关问题中有所涉及。
log_open
open
File
可能有一个恶心的,肮脏的黑客,涉及到垃圾回收器或查看__dict__之类的东西,但你不想这样做,除非你绝对认真地必须这样做。
__dict__
如果您使用的是python 2.5+,则可以使用with关键字(尽管2.5需要'fromfutureimport with_语句)
with
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任务管理器终止进程,仍然将数据写入文件。
lsof,/proc/pid/fd/
这样做的好方法是修改代码以跟踪它打开文件的时间:
然后,使用
log_open
而不是open
来打开文件。你甚至可以做一些更复杂的事情,比如修改File
类来记录自己。这在上面的相关问题中有所涉及。可能有一个恶心的,肮脏的黑客,涉及到垃圾回收器或查看
__dict__
之类的东西,但你不想这样做,除非你绝对认真地必须这样做。如果您使用的是python 2.5+,则可以使用
with
关键字(尽管2.5需要'fromfutureimport with_语句)我不知道破坏
with
语句需要什么样的灾难性失败,但我认为这是一个非常糟糕的失败。在WinXP上,我的快速非科学测试:然后用Windows任务管理器终止进程,仍然将数据写入文件。
lsof,/proc/pid/fd/
相关问题 更多 >
编程相关推荐