2009-05-11 32 views
155

Có cách nào để đưa đường dẫn đến thư mục temp trong Python 2.6 không?Cách đa nền tảng để nhận thư mục tạm thời bằng Python

Ví dụ: dưới Linux có thể là /tmp, trong khi dưới XP C:\Documents and settings\[user]\Application settings\Temp.

+1

Xem mô-đun tempfile tại http://docs.python.org/library/tempfile.html. –

+0

không phải là một pythonist, nhưng bạn nên sử dụng [these] (http://docs.python.org/library/tempfile.html#tempfile.mkdtemp) phương pháp này để tạo tệp/thư mục tạm thời – skrat

Trả lời

236

Đó sẽ là mô-đun tempfile.

Có chức năng nhận thư mục tạm thời và cũng có một số phím tắt để tạo tệp và thư mục tạm thời trong thư mục đó, có tên hoặc chưa đặt tên.

Ví dụ:

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 

Để hoàn chỉnh, dưới đây là cách nó tìm kiếm các thư mục tạm thời, theo các tài liệu:

  1. Các thư mục có tên của biến TMPDIR môi trường.
  2. Thư mục có tên là biến môi trường TEMP.
  3. Thư mục có tên là biến số môi trường TMP.
  4. Một nền tảng cụ thể vị trí:
    • On RiscOS, thư mục được đặt tên bởi các biến Wimp$ScrapDir môi trường.
    • On của Windows, các thư mục C:\TEMP, C:\TMP, \TEMP, và \TMP, theo thứ tự đó.
    • Trên tất cả các nền tảng khác, các thư mục /tmp, /var/tmp/usr/tmp, theo thứ tự đó.
  5. Như một phương sách cuối cùng, thư mục làm việc hiện tại.
+4

Đối với tôi, OSX đang đưa nó vào '/var/folders/ 'thay vì'/tmp' vì đó là cách '$ TMPDIR' được đặt. Xem [tại đây] (http://apple.stackexchange.com/questions/3949/how-do-i-find-out-the-system-temporary-directory). –

43

này nên làm những gì bạn muốn:

print tempfile.gettempdir() 

Đối với tôi vào hộp Windows của tôi, tôi nhận được:

c:\temp 

và trên hộp Linux của tôi, tôi nhận được:

/tmp 
2

Lấy một chút quan trọng từ @ nosklo's answer và thêm một nửa riêng tư sandbox dir:

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

Bằng cách đó bạn có thể dễ dàng làm sạch sau khi chính mình khi bạn đang thực hiện (đối với sự riêng tư, tài nguyên, an ninh, bất cứ điều gì) với:

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

này tương tự như những gì các ứng dụng như Google Chrome và Linux systemd hoạt động. Họ chỉ sử dụng hàm băm hex ngắn hơn và tiền tố ứng dụng cụ thể để "quảng cáo" sự hiện diện của chúng.

4

tôi sử dụng:

import platform 
import tempfile 

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

Điều này là do trên hệ điều hành MacOS, ví dụ: Darwin, tempfile.gettempdir()os.getenv('TMPDIR') trả về một giá trị như '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; đó là điều tôi không muốn!

Các vấn đề liên quan