【发布时间】:2012-11-09 20:30:11
【问题描述】:
当我在 IPython3 shell 中使用这段代码时
>>>data = open('file').read()
然后检查打开的文件描述符:
lsof | grep file
我找到空列表
当我使用这个时:
>>>open('file')
lsof 显示两个项目。问题是为什么第一个操作关闭 fd 而第二个没有?我认为垃圾收集器必须删除没有引用的文件对象。
当我重新分配值时,我知道解释器中的 '_' var
>>>111
>>>_
111
但描述符保持打开状态。 当我重复
>>>open('file')
n 次有 2 * n 个打开的描述符
【问题讨论】:
-
您使用的是哪个 Python shell?在默认的 Python shell 中,在 Python 2.7.3 中,一旦输入第二个表达式,即重新分配
_的表达式,文件描述符就会被释放。 -
没问题;但是,我也不能用 Python 3.3.0 重复它。我执行
open('somefile'),在另一个shell 中lsof显示要打开的文件。然后我执行1+1,在shell中lsof显示文件未打开。
标签: python file python-3.x