在Python中获取临时目录的跨平台方式

时间:2009-05-11 12:21:46

标签: python cross-platform temporary-directory

是否有跨平台方式获取Python 2.6中 temp 目录的路径?

例如,在Linux下/tmp,而在XP C:\Documents and settings\[user]\Application settings\Temp下。

5 个答案:

答案 0 :(得分:300)

那将是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环境变量命名的目录。
    • Windows 上,按顺序列出目录C:\TEMPC:\TMP\TEMP\TMP
    • 在所有其他平台上,按顺序列出目录/tmp/var/tmp/usr/tmp
  5. 作为最后的手段,当前的工作目录。

答案 1 :(得分:56)

这应该做你想要的:

print tempfile.gettempdir()

对于我的Windows机箱,我得到:

c:\temp

在我的Linux机器上我得到:

/tmp

答案 2 :(得分:10)

最简单的方法,基于@nosklo的评论和answer

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和Linux systemd等应用类似。他们只是使用较短的十六进制哈希值和一个特定于应用程序的前缀来“宣传”他们的存在。

答案 3 :(得分:9)

我用:

import platform
import tempfile

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

这是因为在MacOS上,即Darwin,tempfile.gettempdir()os.getenv('TMPDIR')返回'/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'等值;这是我不想要的!

答案 4 :(得分:-2)

为什么会有这么多复杂的答案?

我只是用这个

   (os.getenv("TEMP") if os.name=="nt" else "/tmp") + os.path.sep + "tempfilename.tmp"