Czy istnieje wieloplatformowy sposób na uzyskanie ścieżki do temp katalogu w Pythonie 2.6?
Na przykład pod Linuksem, który byłby /tmp, podczas gdy pod XP C:\Documents and settings\[user]\Application settings\Temp.
Czy istnieje wieloplatformowy sposób na uzyskanie ścieżki do temp katalogu w Pythonie 2.6?
Na przykład pod Linuksem, który byłby /tmp, podczas gdy pod XP C:\Documents and settings\[user]\Application settings\Temp.
Odpowiedzi:
To byłby moduł tymczasowy .
Ma funkcje pobierania katalogu tymczasowego, a także kilka skrótów do tworzenia w nim 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 szuka katalogu tymczasowego, zgodnie z dokumentacją:
TMPDIRzmienną środowiskową.TEMPzmienną środowiskową.TMPzmienną środowiskową.Wimp$ScrapDir zmienną środowiskową.C:\TEMP, C:\TMP, \TEMP, i \TMP, w tej kolejności./tmp, /var/tmporaz /usr/tmp, w takiej kolejności./var/folders/<garbage/here>zamiast, /tmpponieważ tak $TMPDIRjest ustawiony. Zobacz tutaj .
tempfile.gettempdir()rozwiązuje C:\users\user\AppData\Local\Temp. Niestety długa ścieżka.
To powinno zrobić, co chcesz:
print tempfile.gettempdir()
Dla mnie na moim systemie Windows otrzymuję:
c:\temp
a na moim Linux-ie otrzymuję:
/tmp
Używam:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
To dlatego, że na MacOS, czyli Darwin, tempfile.gettempdir()i os.getenv('TMPDIR')zwraca wartość takich jak '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; jest to taki, którego nie zawsze chcę.
Najprostszy sposób, oparty na komentarzu i odpowiedzi @ nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Ale jeśli chcesz ręcznie kontrolować tworzenie katalogów:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
W ten sposób możesz łatwo posprzątać po sobie, gdy skończysz (dla prywatności, zasobów, bezpieczeństwa itp.) Dzięki:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Jest to podobne do działania aplikacji takich jak Google Chrome i Linux systemd. Używają tylko krótszego skrótu szesnastkowego i prefiksu specyficznego dla aplikacji do „reklamowania” swojej obecności.
tempfile.mkdtemp()zamiast tego
mkdtemp()którą zasugerowałeś.