Gibt es eine plattformübergreifende Möglichkeit, den Pfad zum temp
Verzeichnis in Python 2.6 abzurufen?
Zum Beispiel unter Linux /tmp
, während unter XP C:\Documents and settings\[user]\Application settings\Temp
.
Gibt es eine plattformübergreifende Möglichkeit, den Pfad zum temp
Verzeichnis in Python 2.6 abzurufen?
Zum Beispiel unter Linux /tmp
, während unter XP C:\Documents and settings\[user]\Application settings\Temp
.
Antworten:
Das wäre das tempfile- Modul.
Es verfügt über Funktionen zum Abrufen des temporären Verzeichnisses sowie über einige Verknüpfungen zum Erstellen temporärer Dateien und Verzeichnisse, entweder mit oder ohne Namen.
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 im Dokument gemäß der Dokumentation nach dem temporären Verzeichnis gesucht:
TMPDIR
Umgebungsvariablen benannte Verzeichnis .TEMP
Umgebungsvariablen benannte Verzeichnis .TMP
Umgebungsvariablen benannte Verzeichnis .Wimp$ScrapDir
Umgebungsvariablen benannte Verzeichnis .C:\TEMP
, C:\TMP
, \TEMP
, und \TMP
, in dieser Reihenfolge./tmp
, /var/tmp
und /usr/tmp
in dieser Reihenfolge./var/folders/<garbage/here>
statt , /tmp
weil das ist , wie $TMPDIR
festgelegt ist. Siehe hier .
tempfile.gettempdir()
behebt zu C:\users\user\AppData\Local\Temp
. Ein leider langer Weg.
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
Ich benutze:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Dies liegt daran , auf MacOS, dh Darwin, tempfile.gettempdir()
und os.getenv('TMPDIR')
gibt einen Wert wie '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; es ist eines, das ich nicht immer will.
Der einfachste Weg, basierend auf @ nosklos Kommentar und Antwort :
import tempfile
tmp = tempfile.mkdtemp()
Wenn Sie jedoch die Erstellung der Verzeichnisse 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 leicht nach sich selbst aufräumen, wenn Sie fertig sind (für Datenschutz, Ressourcen, Sicherheit, was auch immer) mit:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Dies ähnelt dem, was Anwendungen wie Google Chrome und Linux systemd
tun. Sie verwenden nur einen kürzeren Hex-Hash und ein App-spezifisches Präfix, um für ihre Anwesenheit zu "werben".
tempfile.mkdtemp()
stattdessen verwenden
mkdtemp()
Ihnen vorgeschlagenen.