Esiste un modo multipiattaforma per ottenere il percorso della tempdirectory in Python 2.6?
Ad esempio, sotto Linux sarebbe /tmp, mentre sotto XP C:\Documents and settings\[user]\Application settings\Temp.
Esiste un modo multipiattaforma per ottenere il percorso della tempdirectory in Python 2.6?
Ad esempio, sotto Linux sarebbe /tmp, mentre sotto XP C:\Documents and settings\[user]\Application settings\Temp.
Risposte:
Quello sarebbe il modulo tempfile .
Ha funzioni per ottenere la directory temporanea e ha anche alcune scorciatoie per creare file e directory temporanei, con o senza nome.
Esempio:
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
Per completezza, ecco come cerca la directory temporanea, secondo la documentazione:
TMPDIRvariabile di ambiente.TEMPvariabile di ambiente.TMPvariabile di ambiente.Wimp$ScrapDirvariabile d'ambiente.C:\TEMP, C:\TMP, \TEMP, e \TMP, in questo ordine./tmp, /var/tmpe /usr/tmp, in questo ordine./var/folders/<garbage/here>anziché /tmpperché è così che $TMPDIRviene impostato. Vedi qui .
tempfile.gettempdir()risolve C:\users\user\AppData\Local\Temp. Un percorso purtroppo lungo.
Questo dovrebbe fare quello che vuoi:
print tempfile.gettempdir()
Per me sul mio box di Windows, ottengo:
c:\temp
e sul mio Linux box ottengo:
/tmp
Io uso:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Questo perché su MacOS, ovvero Darwin, tempfile.gettempdir()e os.getenv('TMPDIR')restituiscono un valore come '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; è quello che non sempre voglio.
Il modo più semplice, basato sul commento e sulla risposta di @nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Ma se vuoi controllare manualmente la creazione delle directory:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
In questo modo puoi facilmente ripulire dopo te stesso quando hai finito (per privacy, risorse, sicurezza, qualunque cosa) con:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Questo è simile a quello che fanno applicazioni come Google Chrome e Linux systemd. Usano solo un hash esadecimale più corto e un prefisso specifico dell'app per "pubblicizzare" la loro presenza.
tempfile.mkdtemp()invece
mkdtemp()tuo suggerito.