2009-05-11 16 views
155

Czy istnieje wieloplatformowy sposób uzyskania ścieżki do katalogu temp w Pythonie 2.6?Wieloplatformowy sposób uzyskiwania katalogu tymczasowego w języku Python

Na przykład pod Linuksem będzie to /tmp, a pod XP C:\Documents and settings\[user]\Application settings\Temp.

+1

Zobacz moduł tempfile na http://docs.python.org/library/tempfile.html. –

+0

nie jest pythonistą, ale powinieneś używać tych metod (http://docs.python.org/library/tempfile.html#tempfile.mkdtemp) do tworzenia tymczasowych plików/katalogów. – skrat

Odpowiedz

236

To byłby moduł tempfile.

Posiada funkcje pobierania katalogu tymczasowego, a także ma kilka skrótów do tworzenia plików tymczasowych i katalogów, nazwanych lub nienazwanych.

Przykład:

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 

Dla kompletności, oto jak to wyszukuje katalogu tymczasowego, zgodnie z dokumentacją:

  1. Katalog o nazwie przez zmienną TMPDIR środowiska.
  2. Katalog określony przez zmienną środowiskową TEMP.
  3. Katalog określony przez zmienną środowiskową TMP.
  4. Miejsce, platforma specyficzne:
    • Na Riscos, katalog o nazwie przez zmienną Wimp$ScrapDir środowiska.
    • Na systemu Windows, katalogów C:\TEMP, C:\TMP, \TEMP i \TMP, w tej kolejności.
    • Na wszystkich innych platformach, katalogi: /tmp, /var/tmp i /usr/tmp, w tej kolejności.
  5. W ostateczności aktualny katalog roboczy.
+4

Dla mnie OSX umieszcza go w '/var/folders/ 'zamiast'/tmp' ponieważ tak ustawiono '$ TMPDIR'. Zobacz [tutaj] (http://apple.stackexchange.com/questions/3949/how-do-i-find-out-the-system-temporary-directory). –

43

ten powinien robić to, co chcesz:

print tempfile.gettempdir() 

dla mnie na moim komputerze z systemem Windows, otrzymuję:

c:\temp 

i na moim Linuksie uzyskać:

/tmp 
2

Pobranie ważnego fragmentu z @ nosklo za answer i dodanie półprywatnego Piaskownica reż:

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

W ten sposób można łatwo posprzątać po sobie, gdy skończysz (dla prywatności, zasoby, bezpieczeństwo, cokolwiek) z:

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

ta jest podobna do aplikacji takich jak Google Chrome i Linux systemd do. Używają krótszego skrótu szesnastkowego i prefiksu specyficznego dla aplikacji, aby "reklamować" swoją obecność.

4

używać:

import platform 
import tempfile 

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

Jest tak, ponieważ w MacOS tj Darwina tempfile.gettempdir() i os.getenv('TMPDIR') zwracania wartości jak '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; to tego nie chcę!