Python的tempfile.mkstemp()返回一个整数而不是文件句柄?

时间:2018-04-03 21:23:11

标签: python temporary-files

根据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])获取文件句柄?为什么不返回文件句柄?

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()