wake-up-neo.com

Plattformübergreifende Methode zum Abrufen des temporären Verzeichnisses in Python

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.

210
Joril

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:

  1. Das von der Umgebungsvariablen TMPDIR angegebene Verzeichnis.
  2. Das von der Umgebungsvariablen TEMP angegebene Verzeichnis.
  3. Das von der Umgebungsvariablen TMP angegebene Verzeichnis.
  4. Ein plattformspezifischer Ort:
    • Auf RiscOS , dem Verzeichnis mit dem Namen Wimp$ScrapDir Umgebungsvariable.
    • Unter Windows werden die Verzeichnisse C:\TEMP, C:\TMP, \TEMP, und \TMP, in dieser Reihenfolge.
    • Auf allen anderen Plattformen werden die Verzeichnisse /tmp, /var/tmp, und /usr/tmp, in dieser Reihenfolge.
  5. Als letzte Möglichkeit das aktuelle Arbeitsverzeichnis.
317
nosklo

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
57
RichieHindle

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".

10
hobs

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!

9
Acumenus