Чи існує міжплатформний спосіб отримати шлях до temp
каталогу в Python 2.6?
Наприклад, під Linux це було б /tmp
, а під XP C:\Documents and settings\[user]\Application settings\Temp
.
Чи існує міжплатформний спосіб отримати шлях до temp
каталогу в Python 2.6?
Наприклад, під Linux це було б /tmp
, а під XP C:\Documents and settings\[user]\Application settings\Temp
.
Відповіді:
Це був би модуль 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
змінною середовища.Wimp$ScrapDir
змінною середовища.C:\TEMP
, C:\TMP
, \TEMP
і \TMP
, в такому порядку./tmp
, /var/tmp
і /usr/tmp
, в такому порядку.tempfile.gettempdir()
вирішено до C:\users\user\AppData\Local\Temp
. На жаль довгий шлях.
Це має робити те, що ви хочете:
print tempfile.gettempdir()
Для мене у вікні Windows я отримую:
c:\temp
і в моєму Linux-ящику я отримую:
/tmp
Я використовую:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Це тому, що на MacOS, тобто Дарвін, tempfile.gettempdir()
і os.getenv('TMPDIR')
повертають таке значення, як '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; це я не завжди хочу.
Найпростіший спосіб, заснований на коментарі та відповіді @ nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Але якщо ви хочете вручну контролювати створення каталогів:
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)
Це схоже на те, що systemd
роблять такі програми, як Google Chrome та Linux . Вони просто використовують коротший шістнадцятковий хеш і специфічний для програми приклад, щоб "рекламувати" свою присутність.
tempfile.mkdtemp()
замість цього
mkdtemp()
запропонованої вами.