Apakah ada cara lintas platform untuk mendapatkan jalur ke tempdirektori 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 tempdirektori 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:
TMPDIRvariabel lingkungan.TEMPvariabel lingkungan.TMPvariabel lingkungan.Wimp$ScrapDirvariabel environment.C:\TEMP, C:\TMP, \TEMP, dan \TMP, dalam urutan itu./tmp, /var/tmpdan /usr/tmp, dalam urutan itu./var/folders/<garbage/here>bukan /tmpkarena itu $TMPDIRyang 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.