您好,
是否可以获取所有当前打开的文件句柄的列表,我认为它们存储在环境中的某个位置。
我对theis函数感兴趣,因为我想安全地处理在引发致命错误时打开的任何文件,即关闭文件句柄并用原始文件替换可能已损坏的文件。
我有处理工作但不知道哪些文件句柄是打开的,我无法实现这个想法。
顺便说一句,当初始化文件句柄时,是否可以通过另一个导入的方法继承它?
谢谢
答案 0 :(得分:5)
lsof,/ proc / pid / fd /
答案 1 :(得分:3)
执行此操作的 nice 方法是修改代码以跟踪打开文件的时间:
def log_open( *args, **kwargs ):
print( "Opening a file..." )
print( *args, **kwargs )
return open( *args, **kwargs )
然后,使用log_open
代替open
打开文件。你甚至可以做一些更hacky的事情,比如修改File
类来记录自己。这在上面的链接问题中有所涉及。
可能有一个恶心,肮脏的黑客涉及垃圾收集器或查看__dict__
或其他东西,但你不想这样做,除非你绝对真正认真必须强> 的
答案 2 :(得分:0)
如果你使用的是python 2.5+,你可以使用with
关键字(虽然2.5需要来自 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任务管理器终止进程仍将数据写入文件。