如果不使用,我是否需要关闭tempfile.mkstemp返回给我的操作系统级别的句柄?

时间:2019-07-08 12:39:24

标签: python python-3.x

我需要创建一个临时文件以在Python 3中向其中写入一些数据。该文件将通过一个单独的模块写入,该模块负责处理以字符串形式给出的路径打开文件。

根据文档,我正在使用tempfile.mkstemp()创建此临时文件:

  

mkstemp()将包含操作系统级别句柄的元组返回到打开的文件(由os.open()返回),并按该顺序返回该文件的绝对路径。

鉴于我将不会使用给我的开放操作系统级别文件句柄,我需要关闭它吗?我了解常规的Python文件句柄并关闭它们,但是我对OS级文件描述符/句柄不熟悉。

这样更好吗?

fd, filename = tempfile.mkstemp()
os.close(fd)

或者我可以简单地做到这一点:

_, output_filename = tempfile.mkstemp()

1 个答案:

答案 0 :(得分:2)

返回的文件描述符不是文件对象,垃圾收集器不会为您关闭它。 您应该使用:

fd, filename = tempfile.mkstemp()
os.close(fd)

返回的文件描述符对于避免争用情况很有用,在这种情况下,文件名将替换为攻击者无法读取但可以导致数据泄露的文件符号链接。