【问题标题】:List all currently open file handles? [duplicate]列出所有当前打开的文件句柄? [复制]
【发布时间】:2011-03-23 04:22:42
【问题描述】:
可能重复:
check what files are open in Python
你好,
是否可以获得所有当前打开的文件句柄的列表,我假设它们存储在环境中的某个地方。
我对 thisis 函数很感兴趣,因为我想安全地处理出现致命错误时打开的所有文件,即关闭文件句柄并用原始文件替换可能损坏的文件。
我有处理工作,但不知道打开了哪些文件句柄,我无法实现这个想法。
顺便说一句,当一个文件句柄被初始化时,它可以被另一个导入的方法继承吗?
谢谢
【问题讨论】:
标签:
python
linux
filehandle
【解决方案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 任务管理器杀死进程仍然将数据写入文件。