Esiste un modo multipiattaforma per ottenere il percorso della temp
directory 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 temp
directory 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:
TMPDIR
variabile di ambiente.TEMP
variabile di ambiente.TMP
variabile di ambiente.Wimp$ScrapDir
variabile d'ambiente.C:\TEMP
, C:\TMP
, \TEMP
, e \TMP
, in questo ordine./tmp
, /var/tmp
e /usr/tmp
, in questo ordine./var/folders/<garbage/here>
anziché /tmp
perché è così che $TMPDIR
viene 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.