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ą:
TMPDIR
zmienną środowiskową.TEMP
zmienną środowiskową.TMP
zmienną środowiskową.Wimp$ScrapDir
zmienną środowiskową.C:\TEMP
, C:\TMP
, \TEMP
, i \TMP
, w tej kolejności./tmp
, /var/tmp
oraz /usr/tmp
, w takiej kolejności./var/folders/<garbage/here>
zamiast, /tmp
ponieważ tak $TMPDIR
jest 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ś.