Gibt es eine plattformübergreifende Möglichkeit, den Pfad zum Verzeichnis temp
in Python 2.6 abzurufen?
Zum Beispiel wäre das unter Linux /tmp
, während unter XP C:\Documents and settings\[user]\Application settings\Temp
.
Das wäre das tempfile Modul.
Es verfügt über Funktionen zum Abrufen des temporären Verzeichnisses und einige Verknüpfungen zum Erstellen temporärer Dateien und Verzeichnisse, die entweder benannt oder unbenannt sind.
Beispiel:
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
Der Vollständigkeit halber wird gemäß der Dokumentation nach dem temporären Verzeichnis gesucht:
TMPDIR
angegebene Verzeichnis.TEMP
angegebene Verzeichnis.TMP
angegebene Verzeichnis.Wimp$ScrapDir
Umgebungsvariable.C:\TEMP
, C:\TMP
, \TEMP
, und \TMP
, in dieser Reihenfolge./tmp
, /var/tmp
, und /usr/tmp
, in dieser Reihenfolge.Dies sollte tun, was Sie wollen:
print tempfile.gettempdir()
Für mich auf meiner Windows-Box bekomme ich:
c:\temp
und auf meiner Linux-Box bekomme ich:
/tmp
Der einfachste Weg, basierend auf @ nosklos Kommentar und Antwort :
import tempfile
tmp = tempfile.mkdtemp()
Wenn Sie die Erstellung der Verzeichnisse jedoch manuell steuern möchten:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
Auf diese Weise können Sie nach getaner Arbeit (aus Gründen der Privatsphäre, der Ressourcen, der Sicherheit usw.) ganz einfach aufräumen:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Dies ähnelt dem, was Anwendungen wie Google Chrome und Linux systemd
tun. Sie verwenden lediglich einen kürzeren Hex-Hash und ein app-spezifisches Präfix, um für ihre Präsenz zu "werben".
Ich benutze:
import platform
import tempfile
tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()
Dies liegt daran, dass unter MacOS, d. H. Darwin, tempfile.gettempdir()
und os.getenv('TMPDIR')
einen Wert wie '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
Zurückgeben. es ist eine, die ich nicht will!