9

我正在尝试将 mkstemp 与 Python 3 一起使用:

Python 3.2.3 (default, Jun 25 2012, 23:10:56) 
[GCC 4.7.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from tempfile import mkstemp
>>> mkstemp()
(3, '/tmp/tmp080316')

根据文档,元组的第一个元素应该是文件句柄。事实上,它是一个int。如何获得正确的文件对象?

4

3 回答 3

10

在您的文档中,mktemp您可以看到一个如何使用NamedTemporaryFile您想要的方式的示例:http ://docs.python.org/dev/library/tempfile.html?highlight=mkstemp#tempfile.mktemp

>>> f = NamedTemporaryFile(delete=False)
>>> f
<open file '<fdopen>', mode 'w+b' at 0x384698>

这提供了与 mkstemp 相同的行为,但返回一个文件对象。

于 2012-08-13T00:14:53.663 回答
2

tempfile.NamedTemporaryFile正如您在@tordek 的回答中看到的那样,我知道的最好的方法是使用。

但是如果你有一个来自底层操作系统的原始 FD,你可以这样做来把它变成一个文件对象:

f = open(fd, closefd=True)

这适用于 Python 3

于 2012-08-13T00:43:14.323 回答
0

int 表示操作系统级别的文件句柄。我真正需要的是一个更高级的文件对象。要制作一个,请使用:

os_handle = mkstemp()
f = open(mkstemp()[0])
于 2012-08-13T00:11:30.217 回答