Existe-t-il un moyen multiplateforme d’obtenir le chemin du répertoire temp
dans Python 2.6?)?
Par exemple, sous Linux, ce serait /tmp
, alors que sous XP C:\Documents and settings\[user]\Application settings\Temp
.
Ce serait le module tempfile .
Il a des fonctions pour obtenir le répertoire temporaire et quelques raccourcis pour créer des fichiers et répertoires temporaires, nommés ou non.
Exemple:
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
Pour être complet, voici comment il recherche le répertoire temporaire, en fonction de la documentation:
TMPDIR
.TEMP
.TMP
.Wimp$ScrapDir
variable d'environnement.C:\TEMP
, C:\TMP
, \TEMP
, et \TMP
, dans cet ordre./tmp
, /var/tmp
, et /usr/tmp
, dans cet ordre.Cela devrait faire ce que vous voulez:
print tempfile.gettempdir()
Pour moi sur ma machine Windows, je reçois:
c:\temp
et sur ma machine Linux je reçois:
/tmp
La manière la plus simple, basée sur le commentaire de @ nosklo et answer :
import tempfile
tmp = tempfile.mkdtemp()
Mais si vous voulez contrôler manuellement la création des répertoires:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
De cette façon, vous pouvez facilement nettoyer après vous lorsque vous avez terminé (pour la confidentialité, les ressources, la sécurité, etc.) avec:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Ceci est similaire aux applications telles que Google Chrome et Linux systemd
do.). Elles utilisent simplement un hachage hexagonal plus court et un préfixe spécifique à l'application pour "annoncer" leur présence.
J'utilise:
import platform
import tempfile
tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()
En effet, sous MacOS, c’est-à-dire Darwin, tempfile.gettempdir()
et os.getenv('TMPDIR')
renvoient une valeur telle que '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; c'est un que je ne veux pas!