2009-05-11 7 views
155

में temp निर्देशिका प्राप्त करने का क्रॉस-प्लेटफ़ॉर्म तरीका क्या Python 2.6 में temp निर्देशिका का पथ प्राप्त करने का एक क्रॉस-प्लेटफ़ॉर्म तरीका है?पायथन

उदाहरण के लिए, लिनक्स के तहत /tmp होगा, जबकि XP ​​C:\Documents and settings\[user]\Application settings\Temp के तहत।

+1

http://docs.python.org/library/tempfile.html पर tempfile मॉड्यूल देखें। –

+0

एक पायथनिस्ट नहीं है, लेकिन आपको अस्थायी फ़ाइलों/निर्देशिका बनाने के लिए [इन] (http://docs.python.org/library/tempfile.html#tempfile.mkdtemp) विधियों का उपयोग करना चाहिए – skrat

उत्तर

236

यह 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 

पूर्णता के लिए, यहाँ है कि यह कैसे अस्थायी निर्देशिका के लिए खोज करता, प्रलेखन के अनुसार बताया गया है:

  1. निर्देशिका TMPDIR वातावरण चर द्वारा नाम दिया है।
  2. TEMP पर्यावरण चर द्वारा नामित निर्देशिका।
  3. TMP पर्यावरण चर द्वारा नामित निर्देशिका।
  4. एक प्लेटफ़ॉर्म-विशिष्ट स्थान:
    • पर RiscOS, निर्देशिका Wimp$ScrapDir वातावरण चर द्वारा नाम दिया है।
    • पर विंडोज, निर्देशिका C:\TEMP, C:\TMP, \TEMP, और \TMP इसी क्रम में।
    • अन्य सभी प्लेटफ़ॉर्म पर, निर्देशिका /tmp, /var/tmp, और /usr/tmp, उस क्रम में।
  5. अंतिम उपाय के रूप में, वर्तमान कार्यशील निर्देशिका।
+4

मेरे लिए, ओएसएक्स इसे '/var/फ़ोल्डर्स/<कचरा/यहां> '' tmp' के बजाय 'क्योंकि यह है कि '$ TMPDIR' सेट है। [यहां] देखें (http://apple.stackexchange.com/questions/3949/how-do-i-find-out-the- सिस्टम- समकालीन- निर्देशिका)। –

43

यह आप क्या चाहते हैं करना चाहिए: मेरे Windows बॉक्स पर

print tempfile.gettempdir() 

मेरे लिए, मैं:

c:\temp 

और मेरे लिनक्स बॉक्स पर मैं:

/tmp 
2

@ nosklo के answer से महत्वपूर्ण बिट लेना और अर्ध-निजी जोड़ना सैंडबॉक्स 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) 

यह गूगल की तरह क्या आवेदन करने के लिए इसी तरह की है क्रोम और लिनक्स systemd करो। वे सिर्फ एक छोटी हेक्स हैश और ऐप-विशिष्ट उपसर्ग का उपयोग अपनी मौजूदगी के विज्ञापन के लिए करते हैं।

4

मैं का उपयोग करें:

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' के रूप में; यह वह है जिसे मैं नहीं चाहता!