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

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

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

168651 次浏览

这将是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:\TEMPC:\TMP\TEMP\TMP,按此顺序。
    • 在所有其他平台上,目录/tmp/var/tmp/usr/tmp按此顺序。
    • 李< / ul > < / >
    • 作为最后的手段,当前工作目录。

这应该是你想要的:

print(tempfile.gettempdir())

对我来说,在我的Windows盒子上,我得到:

c:\temp

在我的Linux盒子上,我得到:

/tmp

最简单的方法,基于@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)

这类似于谷歌Chrome和Linux systemd这样的应用程序。他们只是使用更短的十六进制散列和特定于应用程序的前缀来“宣传”他们的存在。

我使用:

from pathlib import Path
import platform
import tempfile


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

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

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

我只用这个

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