python - 在 Python 中关闭文件

标签 python file-io garbage-collection with-statement

this discussion关于运行进程并丢弃其输出的最简单方法,我建议使用以下代码:

with open('/dev/null', 'w') as dev_null:
    subprocess.call(['command'], stdout=dev_null, stderr=dev_null)

另一个开发者推荐了这个版本:

subprocess.call(['command'], stdout=open('/dev/null', 'w'), stderr=STDOUT)

我这个 C++ 程序员想说什么时候对象被释放是一个实现细节,所以为了避免让文件句柄打开一段不确定的时间,我应该使用 with。但是一个coupleresources建议 Python 总是或几乎总是对这样的代码使用引用计数,在这种情况下,文件句柄应该在 subprocess.call 完成后立即回收,并且不需要使用 with .

(我猜想将文件句柄留给 /dev/null 特别是不太重要,所以假装它是一个重要文件。)

哪种方法最好?

最佳答案

你是对的,refcouting 是保证的。事实上,只有 CPython(这是主要的实现,是的,但甚至不是唯一的实现)提供了重新计数。万一 CPython 更改了该实现细节(不太可能,是的,但可能),或者您的代码曾经在替代实现上运行,或者您由于任何其他原因丢失了 refcouting,该文件将不会关闭。因此,鉴于 with 语句使清理非常变得容易,我建议您在打开文件时始终使用上下文管理器。 p>

关于python - 在 Python 中关闭文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196724/

相关文章:

python - 在 os.walk() 期间找到绝对路径的更好方法?

c# - 下载文件并创建与主机相同的文件夹结构

javascript - 为什么 "readFile"方法将文件内容放入内存而不是 "readFileSync"?

string - slice 后释放字符串以进行垃圾回收的正确方法

python - 在python中将数据写入.json文件

python - 将 timedelta 对象转换为时间对象

python - 错误 ModuleNotFoundError : No module named 'azure.keyvault.secrets' although I installed the package

python - 为什么 python 控制台运行与空闲不同

python - 更改打开文件访问模式

javascript - Firefox 崩溃与 Angular (垃圾收集器巨魔?)