我正在尝试在Python 3中使用mkstemp:
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')
根据documentation,元组的第一个元素应该是文件句柄。事实上,它是一个int。如何获得正确的文件对象?
答案 0 :(得分:9)
在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相同的行为,但返回了一个文件对象。
答案 1 :(得分:2)
我知道的最好方法是使用tempfile.NamedTemporaryFile
,正如您在@tordek的回答中所看到的那样。
但是如果你有来自底层操作系统的原始FD,你可以这样做,使其成为一个文件对象:
f = open(fd, closefd=True)
这适用于Python 3
答案 2 :(得分:0)
int表示操作系统级文件句柄。我真正需要的是一个更高级的文件对象。要制作一个,请使用:
os_handle = mkstemp()
f = open(mkstemp()[0])