9

Python3で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')

ドキュメントによると、タプルの最初の要素はファイルハンドルであると想定されています。実際、それはintです。適切なファイルオブジェクトを取得するにはどうすればよいですか?

4

3 に答える 3

10

のドキュメントでは、希望mktempする方法で使用する方法の例を見ることができますNamedTemporaryFilehttp ://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の回答でわかるように、私が知っている最善の方法はを使用することです。

ただし、基盤となるOSからの生のFDがある場合は、これを実行してファイルオブジェクトにすることができます。

f = open(fd, closefd=True)

これはPython3で機能します

于 2012-08-13T00:43:14.323 に答える
0

intは、OSレベルのファイルハンドルを表します。私が実際に必要としているのは、より高レベルのファイルオブジェクトです。作成するには、次を使用します。

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