2009-05-11 25 views
155

Python 2.6'daki temp dizinine giden yolu almanın bir çapraz platform yolu var mı? Örneğin, Linux altında /tmp, XP C:\Documents and settings\[user]\Application settings\Temp altında olur.Python'da geçici dizin alma çapraz platform yolu

+1

http://docs.python.org/library/tempfile.html adresindeki tempfile modülüne bakın. –

+0

bir pythonist değil, ama geçici dosyalar/dizinler oluşturmak için [bu] (http://docs.python.org/library/tempfile.html#tempfile.mkdtemp) yöntemlerini kullanmalısınız – skrat

cevap

236

tempfile modülü bu olurdu.

Geçici dizini almak için işlevleri vardır ve ayrıca adında veya adında adında geçici dosyalar ve dizinler oluşturmak için bazı kısayollar vardır.

Örnek: Bu belgelere göre, geçici dizine arar nasıl

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 

tamlığı, aşağıda bir:

  1. TMPDIR ortam değişkeni tarafından adlı dizin.
  2. TEMP ortam değişkeni tarafından adlandırılmış dizin.
  3. TMP ortam değişkeni tarafından adlandırılmış dizin.
  4. bir platforma özel konumu:
    • RiscOS, Wimp$ScrapDir ortam değişkeni tarafından adlı dizin günü.
    • bu sırayla, Windows, dizinlere C:\TEMP, C:\TMP, \TEMP ve \TMP, günü.
    • Diğer tüm platformlarda, bu sırayla /tmp, /var/tmp ve /usr/tmp dizinleri.
  5. Son çare olarak, geçerli çalışma dizini.
+4

Benim için OSX,/var/folders/<çöp/burada> ''/tmp' yerine '$ TMPDIR' ayarlandığı için. Bkz. [Burada] (http://apple.stackexchange.com/questions/3949/how-do-i-find-out-the-system-temporary-directory). –

43

İstediğin yapmalıyım: Benim için

print tempfile.gettempdir() 

benim, Windows kutuyu, alıyorum:

c:\temp 

ve Linux makinemde

alıyorum:

/tmp 
2

@ nosklo'nun answer numaralı telefonundan önemli bir parçayı almak ve yarı özel ekleyerek sandbox dir: ile

import os 
from tempfile import gettempdir 
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times()))) 
os.makedirs(tmp) 

işiniz bittiğinde kolayca kendinize temizlemek Bu şekilde (gizlilik, kaynaklar, güvenlik için, her neyse):

from shutil import rmtree 
rmtree(tmp, ignore_errors=True) 

Bu Google gibi neyi uygulamalara benzer Chrome ve Linux systemd yapmak. Sadece onların varlığını "tanıtmak" için daha kısa bir hex hash ve uygulamaya özel bir önek kullanıyorlar.

4

kullanmak:

import platform 
import tempfile 

tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir() 

Bu, MacOS, yani Darwin, tempfile.gettempdir() üzerinde ve '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T' gibi bir değer iade os.getenv('TMPDIR'); istemediğim bir şey!

İlgili konular