Cross-platform way of getting temp directory in Python
That would be the tempfile module.
It has functions to get the temporary directory, and also has some shortcuts to create temporary files and directories in it, either named or unnamed.
Example:
import tempfileprint tempfile.gettempdir() # prints the current temporary directoryf = tempfile.TemporaryFile()f.write('something on temporaryfile')f.seek(0) # return to beginning of fileprint f.read() # reads data back from the filef.close() # temporary file is automatically deleted here
For completeness, here's how it searches for the temporary directory, according to the documentation:
- The directory named by the
TMPDIR
environment variable. - The directory named by the
TEMP
environment variable. - The directory named by the
TMP
environment variable. - A platform-specific location:
- On RiscOS, the directory named by the
Wimp$ScrapDir
environment variable. - On Windows, the directories
C:\TEMP
,C:\TMP
,\TEMP
, and\TMP
, in that order. - On all other platforms, the directories
/tmp
,/var/tmp
, and/usr/tmp
, in that order.
- On RiscOS, the directory named by the
- As a last resort, the current working directory.
This should do what you want:
print tempfile.gettempdir()
For me on my Windows box, I get:
c:\temp
and on my Linux box I get:
/tmp
I use:
from pathlib import Pathimport platformimport tempfiletempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
This is because on MacOS, i.e. Darwin, tempfile.gettempdir()
and os.getenv('TMPDIR')
return a value such as '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; it is one that I do not always want.