Jos*_*ley 4 python file-io garbage-collection with-statement
在关于运行进程并丢弃其输出的最简单方法的讨论中,我建议使用以下代码:
with open('/dev/null', 'w') as dev_null:
subprocess.call(['command'], stdout=dev_null, stderr=dev_null)
Run Code Online (Sandbox Code Playgroud)
另一位开发者建议这个版本
subprocess.call(['command'], stdout=open('/dev/null', 'w'), stderr=STDOUT)
Run Code Online (Sandbox Code Playgroud)
我的C++程序员想说的是,当对象被释放时是一个实现细节,所以为了避免文件句柄在不确定的时间段内打开,我应该使用with.但夫妇的资源提到Python总是或几乎总是使用引用计数为这样的代码,在这种情况下,文件句柄应尽快回收subprocess.call等做用with是不必要的.
(我想/dev/null特别是把文件句柄打开是不太重要的,所以假装它是一个重要的文件.)
哪种方法最好?
小智 10
你是对的,refcouting 不保证.事实上,只有CPython(这是主要的实现,是的,但甚至不是远程的唯一一个)提供了引用计数.如果CPython曾经更改过该实现细节(不太可能,是的,但可能),或者您的代码是在备用实现上运行,或者由于任何其他原因而丢失了引用,则该文件将不会被关闭.因此,鉴于该with语句使清理变得非常容易,我建议您在打开文件时始终使用上下文管理器.
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |