Python';s tempfile.mkstemp()返回整数而不是文件句柄?

Python';s tempfile.mkstemp()返回整数而不是文件句柄?,python,temporary-files,Python,Temporary Files,根据, mkstemp()返回一个元组,该元组包含一个打开文件的操作系统级句柄(由OS.open()返回)以及该文件的绝对路径名,顺序如下 但是,从这些shell命令来看,元组的第一个成员似乎是整数,而不是文件句柄: >>> temp = tempfile.mkstemp(suffix='.html') >>> temp (17, '/var/folders/dc/nv4yxcrd0zqd2dtxlj281b740000gn/T/tmpktmb2gjg.ht

根据,

mkstemp()
返回一个元组,该元组包含一个打开文件的操作系统级句柄(由
OS.open()
返回)以及该文件的绝对路径名,顺序如下

但是,从这些shell命令来看,元组的第一个成员似乎是整数,而不是文件句柄:

>>> temp = tempfile.mkstemp(suffix='.html')

>>> temp
(17, '/var/folders/dc/nv4yxcrd0zqd2dtxlj281b740000gn/T/tmpktmb2gjg.html')

>>> type(temp[0])
int

是否必须使用
open(temp[1])
获取文件句柄?为什么它不返回文件句柄?

这是预期的行为,因为操作系统级别是整数

有几种方法可以接受这样的整数:

这些函数对使用文件描述符引用的I/O流进行操作

文件描述符是与当前进程打开的文件相对应的小整数。例如,标准输入通常为文件描述符0,标准输出为1,标准错误为2。由进程打开的其他文件将被分配3、4、5等。“文件描述符”这个名字有点欺骗性;在Unix平台上,套接字和管道也由文件描述符引用

它们不是Python文件对象,但您可以使用为给定描述符创建Python文件对象


但是,如果您想要的只是一个作为Python文件对象的临时文件,只需坚持使用
temp
模块的高级函数,例如。

如果您想要的是一个实际的类似文件的对象,而不是文件句柄(又称文件描述符,一个普通的
int
),请使用更高级的类。这将获得一个打开的文件对象,对象的
.name
属性将提供名称。好处:关闭时,临时文件会自动删除(或者如果您想保留它,您可以使用
delete=False
;是否删除由您决定)
NamedTemporaryFile
是根据
mkstemp
实现的,因此它同样安全。