问题:在Python中获取临时目录的跨平台方法
是否有跨平台的途径来获取 temp
Python 2.6中目录?
例如,在Linux /tmp
下为XP,而在XP下为C:\Documents and settings\[user]\Application settings\Temp
。
回答 0
那将是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
为了完整起见,以下是根据文档搜索临时目录的方式:
- 由
TMPDIR
环境变量命名的目录。 - 由
TEMP
环境变量命名的目录。 - 由
TMP
环境变量命名的目录。 - 特定于平台的位置:
- 在RiscOS上,由
Wimp$ScrapDir
环境变量。 - 在的Windows,目录
C:\TEMP
,C:\TMP
,\TEMP
,并\TMP
按此顺序。 - 在所有其他平台,目录
/tmp
,/var/tmp
以及/usr/tmp
在这个顺序。
- 在RiscOS上,由
- 不得已时使用当前工作目录。
回答 1
这应该做您想要的:
print tempfile.gettempdir()
对于我的Windows机器,我得到:
c:\temp
在我的Linux机器上,我得到:
/tmp
回答 2
我用:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
这是因为在MacOS,即达尔文,tempfile.gettempdir()
并os.getenv('TMPDIR')
返回一个值,如'/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; 这是我并不总是想要的。
回答 3
最简单的方法,基于@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)
这类似于Google Chrome和Linux systemd
这样的应用程序。他们只是使用较短的十六进制哈希值和特定于应用的前缀来“宣传”它们的存在。