可能重复:
检查在 Python 中打开了哪些文件
你好,
是否可以获得所有当前打开的文件句柄的列表,我假设它们存储在环境中的某个位置。
我对 thisis 函数很感兴趣,因为我想安全地处理出现致命错误时打开的任何文件,即关闭文件句柄并用原始文件替换可能损坏的文件。
我有处理工作,但不知道打开了哪些文件句柄,我无法实现这个想法。
顺便说一句,当文件句柄被初始化时,它可以被另一个导入的方法继承吗?
谢谢
可能重复:
检查在 Python 中打开了哪些文件
你好,
是否可以获得所有当前打开的文件句柄的列表,我假设它们存储在环境中的某个位置。
我对 thisis 函数很感兴趣,因为我想安全地处理出现致命错误时打开的任何文件,即关闭文件句柄并用原始文件替换可能损坏的文件。
我有处理工作,但不知道打开了哪些文件句柄,我无法实现这个想法。
顺便说一句,当文件句柄被初始化时,它可以被另一个导入的方法继承吗?
谢谢
lsof, /proc/pid/fd/
这样做的好方法是修改您的代码以跟踪它何时打开文件:
def log_open( *args, **kwargs ):
print( "Opening a file..." )
print( *args, **kwargs )
return open( *args, **kwargs )
然后,使用log_open
而不是open
打开文件。你甚至可以做一些更hacky的事情,比如修改File
类来记录自己。上面的链接问题中涵盖了这一点。
可能有一个令人作呕的、肮脏的 hack 涉及垃圾收集器或查看__dict__
或其他东西,但你不想这样做,除非你绝对真的非常认真地必须这样做。
如果您使用的是 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 任务管理器终止进程仍然将数据写入文件。