Кросс-платформенный способ получения каталога temp в Python
есть ли кросс-платформенный способ получить путь к temp
4 ответа:
это было бы tempfile модуль.
он имеет функции для получения временного каталога, а также имеет некоторые ярлыки для создания временных файлов и каталогов в нем, либо с именем, либо без имени.
пример:
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для полноты картины, вот как он ищет временный каталог, согласно документации:
- каталог с именем
TMPDIRокружающая среда переменная.- каталог с именем
TEMPпеременные среды.- каталог с именем
TMPпеременные среды.- специфическое для платформы местоположение:
- On RiscOS, каталог с именем
Wimp$ScrapDirпеременные среды.- On Windows каталоги
C:\TEMP,C:\TMP,\TEMPи\TMPв этом порядке.- на всех других платформах, каталоги
/tmp,/var/tmpи/usr/tmpв этом порядке.- в крайнем случае, текущий рабочий каталог.
Это должно делать то, что вы хотите:
print tempfile.gettempdir()для меня на моем окне Windows, я получаю:
c:\tempи на моем Linux box я получаю:
/tmp
Я использую:
import platform import tempfile tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()это потому, что на MacOS, т. е. Дарвин,
tempfile.gettempdir()иos.getenv('TMPDIR')возвращает значение, например'/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; Это тот, который я не хочу!
принимая важный бит от @nosklo's ответ и добавление полу-частной песочницы dir:
import os from tempfile import gettempdir tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times()))) os.makedirs(tmp)таким образом, вы можете легко очистить после себя, когда вы закончите (для конфиденциальности, ресурсов, безопасности, что угодно) с:
from shutil import rmtree rmtree(tmp, ignore_errors=True)Это похоже на то, что приложения, такие как Google Chrome и Linux
systemddo. Они просто используют более короткий шестнадцатеричный хэш и префикс для приложения, чтобы "рекламировать" свое присутствие.