มีวิธีข้ามแพลตฟอร์มในการรับเส้นทางไปยังtemp
ไดเรกทอรีใน Python 2.6 หรือไม่
ตัวอย่างเช่นภายใต้ลินุกซ์ที่จะเป็น/tmp
ในขณะที่ภายใต้ C:\Documents and settings\[user]\Application settings\Temp
XP
มีวิธีข้ามแพลตฟอร์มในการรับเส้นทางไปยังtemp
ไดเรกทอรีใน Python 2.6 หรือไม่
ตัวอย่างเช่นภายใต้ลินุกซ์ที่จะเป็น/tmp
ในขณะที่ภายใต้ C:\Documents and settings\[user]\Application settings\Temp
XP
คำตอบ:
นั่นจะเป็นโมดูล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
ในลำดับที่/var/folders/<garbage/here>
แทนที่จะเป็น/tmp
เพราะเป็นวิธีการ$TMPDIR
ตั้งค่า ดูที่นี่
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)
นี้จะคล้ายกับสิ่งที่ใช้งานเช่น Google Chrome และลินุกซ์systemd
ไม่ พวกเขาใช้แฮช hex ที่สั้นกว่าและคำนำหน้าเฉพาะแอพเพื่อ "โฆษณา" การแสดงตนของพวกเขา
tempfile.mkdtemp()
แทน
mkdtemp()
คุณขอแนะนำรุ่นที่ยืดหยุ่นกว่าและยืดหยุ่นกว่า