Python 2.6のtemp
ディレクトリへのパスを取得するクロスプラットフォームの方法はありますか?
たとえば、Linuxでは/tmp
になりますが、XP C:\Documents and settings\[user]\Application settings\Temp
になります。
それは 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
完全を期すため、ドキュメントによると、一時ディレクトリを検索する方法は次のとおりです。
TMPDIR
環境変数で指定されたディレクトリ。TEMP
環境変数で指定されたディレクトリ。TMP
環境変数で指定されたディレクトリ。Wimp$ScrapDir
環境変数で指定されたディレクトリ。C:\TEMP
、C:\TMP
、\TEMP
、および\TMP
、注文。/tmp
、/var/tmp
、および/usr/tmp
の順序で。これはあなたが望むことをするはずです:
print tempfile.gettempdir()
私のWindowsボックスでは、以下が得られます。
c:\temp
私のLinuxボックスでは次のものが得られます:
/tmp
@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進数のハッシュとアプリ固有のプレフィックスを使用して、その存在を「アドバタイズ」するだけです。
私が使う:
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'
などの値を返すためです。それは私が望まないものです!