web-dev-qa-db-ja.com

Pythonで一時ディレクトリを取得するクロスプラットフォームの方法

Python 2.6のtempディレクトリへのパスを取得するクロスプラットフォームの方法はありますか?

たとえば、Linuxでは/tmpになりますが、XP C:\Documents and settings\[user]\Application settings\Tempになります。

210
Joril

それは tempfile モジュールです。

一時ディレクトリを取得する機能があり、名前付きまたは名前なしの一時ファイルと一時ディレクトリを作成するショートカットもあります。

例:

import tempfile

print tempfile.gettempdir() # prints the current temporary directory

f = tempfile.TemporaryFile()
f.write('something on temporaryfile')
f.seek(0) # return to beginning of file
print f.read() # reads data back from the file
f.close() # temporary file is automatically deleted here

完全を期すため、ドキュメントによると、一時ディレクトリを検索する方法は次のとおりです。

  1. TMPDIR環境変数で指定されたディレクトリ。
  2. TEMP環境変数で指定されたディレクトリ。
  3. TMP環境変数で指定されたディレクトリ。
  4. プラットフォーム固有の場所:
    • RiscOSでは、Wimp$ScrapDir環境変数で指定されたディレクトリ。
    • Windowsでは、ディレクトリC:\TEMPC:\TMP\TEMP、および\TMP、注文。
    • 他のすべてのプラットフォームでは、ディレクトリ/tmp/var/tmp、および/usr/tmpの順序で。
  5. 最後の手段として、現在の作業ディレクトリ。
317
nosklo

これはあなたが望むことをするはずです:

print tempfile.gettempdir()

私のWindowsボックスでは、以下が得られます。

c:\temp

私のLinuxボックスでは次のものが得られます:

/tmp
57
RichieHindle

@noskloのコメントと answer に基づく最も簡単な方法:

import tempfile
tmp = tempfile.mkdtemp()

ただし、ディレクトリの作成を手動で制御する場合:

import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)

そうすることで、次の操作を行った後(プライバシー、リソース、セキュリティなど)に自分で簡単にクリーンアップできます。

from shutil import rmtree
rmtree(tmp, ignore_errors=True)

これは、Google ChromeやLinux systemdなどのアプリケーションが行うことと似ています。短い16進数のハッシュとアプリ固有のプレフィックスを使用して、その存在を「アドバタイズ」するだけです。

10
hobs

私が使う:

import platform
import tempfile

tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()

これは、MacOS、つまりダーウィンでは、tempfile.gettempdir()およびos.getenv('TMPDIR')'/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'などの値を返すためです。それは私が望まないものです!

9
Acumenus