2009-05-11 23 views
155

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

たとえば、Linuxでは/tmp、XP未満の場合はC:\Documents and settings\[user]\Application settings\Tempとなります。

+1

http://docs.python.org/library/tempfile.htmlにあるtempfileモジュールを参照してください。 –

+0

pythonistではありませんが、テンポラリファイル/ディレクトリを作成するには[これらの](http://docs.python.org/library/tempfile.html#tempfile.mkdtemp)メソッドを使うべきです – skrat

答えて

236

これは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. プラットフォーム固有の場所:RISCOSWimp$ScrapDir環境変数で指定されたディレクトリに
    • Windowsのでは、ディレクトリC:\TEMPC:\TMP\TEMP、および\TMP、そのためです。
    • 他のすべてのプラットフォームでは、ディレクトリ/tmp,/var/tmp、および/usr/tmpの順になります。
  5. 最後の手段として、現在の作業ディレクトリ。これは、あなたが欲しいものを行う必要があります
+4

OSXは私には ' '$ tmpdir'がどのように設定されているかによって、'/tmp'ではなく/ var/folders/ [ここ](http://apple.stackexchange.com/questions/3949/how-do-i-find-out-the-system-temporary-directory)を参照してください。 –

43

print tempfile.gettempdir() 

私にとっては、私のWindowsマシン上で、私が取得:

c:\temp 

と私のLinuxマシン上の私が手:

/tmp 
2

@ noskloのanswerから重要なビットをとり、サンドボックスでdir:で

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進ハッシュとアプリケーション固有の接頭辞を使用して、その存在を「広告する」。

Iが使用
4

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'ような値を返すためです。それは私が欲しくないものです!

関連する問題