根据https://docs.python.org/3/library/tempfile.html#tempfile.mkstemp,
mkstemp()
按顺序返回一个元组,该元组包含一个打开文件的OS级句柄(由os.open()
返回)和该文件的绝对路径名。
但是,从这些shell命令看,它看起来像元组的第一个成员是整数,而不是文件句柄:
In [18]: temp = tempfile.mkstemp(suffix='.html')
In [19]: temp
Out[19]: (17, '/var/folders/dc/nv4yxcrd0zqd2dtxlj281b740000gn/T/tmpktmb2gjg.html')
In [20]: type(temp[0])
Out[20]: int
我是否必须使用open(temp[1])
获取文件句柄?为什么不返回文件句柄?
答案 0 :(得分:3)
这是预期的行为,因为操作系统级别file handles是整数。
有several functions in the os
module可以接受这样的整数:
这些函数对使用文件描述符引用的I / O流进行操作。
文件描述符是与当前进程打开的文件对应的小整数。例如,标准输入通常是文件描述符0,标准输出是1,标准错误是2.然后,进程打开的其他文件将分配3,4,5等。名称“文件描述符”略有欺骗性;在Unix平台上,套接字和管道也由文件描述符引用。
它们不是Python文件对象,但您可以使用io.FileIO()
为给定描述符创建Python文件对象。
但是,如果你想要的只是一个临时文件作为Python文件对象,只需坚持temp
模块的更高级别的功能,例如tempfile.TemporaryFile()
。