Apakah ada cara lintas platform untuk mendapatkan jalur ke temp
direktori di Python 2.6?
Misalnya, di Linux yang akan /tmp
, sementara di bawah XP C:\Documents and settings\[user]\Application settings\Temp
.
Apakah ada cara lintas platform untuk mendapatkan jalur ke temp
direktori di Python 2.6?
Misalnya, di Linux yang akan /tmp
, sementara di bawah XP C:\Documents and settings\[user]\Application settings\Temp
.
Jawaban:
Itu akan menjadi modul tempfile .
Ini memiliki fungsi untuk mendapatkan direktori sementara, dan juga memiliki beberapa cara pintas untuk membuat file dan direktori sementara di dalamnya, baik bernama atau tidak disebutkan namanya.
Contoh:
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
Untuk kelengkapan, berikut cara mencari direktori sementara, sesuai dengan dokumentasi:
TMPDIR
variabel lingkungan.TEMP
variabel lingkungan.TMP
variabel lingkungan.Wimp$ScrapDir
variabel environment.C:\TEMP
, C:\TMP
, \TEMP
, dan \TMP
, dalam urutan itu./tmp
, /var/tmp
dan /usr/tmp
, dalam urutan itu./var/folders/<garbage/here>
bukan /tmp
karena itu $TMPDIR
yang diatur. Lihat di sini .
tempfile.gettempdir()
memutuskan untuk C:\users\user\AppData\Local\Temp
. Sayangnya jalannya panjang.
Ini harus melakukan apa yang Anda inginkan:
print tempfile.gettempdir()
Bagi saya di kotak Windows saya, saya mendapatkan:
c:\temp
dan di kotak Linux saya saya dapatkan:
/tmp
Saya menggunakan:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Ini karena pada MacOS, yaitu Darwin, tempfile.gettempdir()
dan os.getenv('TMPDIR')
mengembalikan nilai seperti '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; itu salah satu yang tidak selalu saya inginkan.
Cara paling sederhana, berdasarkan komentar dan jawaban @ nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Tetapi jika Anda ingin secara manual mengontrol pembuatan direktori:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
Dengan begitu Anda dapat dengan mudah membersihkan diri sendiri setelah selesai (untuk privasi, sumber daya, keamanan, apa pun) dengan:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Ini mirip dengan apa yang dilakukan aplikasi seperti Google Chrome dan Linux systemd
. Mereka hanya menggunakan hex hash yang lebih pendek dan awalan khusus aplikasi untuk "mengiklankan" keberadaan mereka.
tempfile.mkdtemp()
bukannya
mkdtemp()
Anda sarankan.