Existe-t-il un moyen multiplateforme d'obtenir le chemin d'accès au temp
répertoire dans Python 2.6?
Par exemple, sous Linux, ce serait /tmp
, tandis que sous XP C:\Documents and settings\[user]\Application settings\Temp
.
Existe-t-il un moyen multiplateforme d'obtenir le chemin d'accès au temp
répertoire dans Python 2.6?
Par exemple, sous Linux, ce serait /tmp
, tandis que sous XP C:\Documents and settings\[user]\Application settings\Temp
.
Réponses:
Ce serait le module tempfile .
Il a des fonctions pour obtenir le répertoire temporaire, et possède également des raccourcis pour y créer des fichiers et des 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, selon la documentation:
TMPDIR
variable d'environnement.TEMP
variable d'environnement.TMP
variable d'environnement.Wimp$ScrapDir
variable d'environnement.C:\TEMP
, C:\TMP
, \TEMP
et \TMP
, dans cet ordre./tmp
, /var/tmp
et /usr/tmp
, dans cet ordre./var/folders/<garbage/here>
lieu de /tmp
parce que c'est comme ça que ça se $TMPDIR
passe. Voyez ici .
tempfile.gettempdir()
résout en C:\users\user\AppData\Local\Temp
. Un chemin malheureusement long.
Cela devrait faire ce que vous voulez:
print tempfile.gettempdir()
Pour moi sur ma box Windows, j'obtiens:
c:\temp
et sur ma box Linux je reçois:
/tmp
J'utilise:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
En effet, sur MacOS, c'est-à-dire Darwin, tempfile.gettempdir()
et os.getenv('TMPDIR')
retourne une valeur telle que '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; c'est celle que je ne veux pas toujours.
La manière la plus simple, basée sur le commentaire et la réponse de @ nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Mais si vous souhaitez 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 à ce que font des applications comme Google Chrome et Linux systemd
. Ils utilisent simplement un hachage hexadécimal plus court et un préfixe spécifique à l'application pour "annoncer" leur présence.
tempfile.mkdtemp()
place
mkdtemp()
vous avez suggérée.