在Python中获取临时目录的跨平台方式
是否有跨平台的方式获取Python 2.6中temp
目录的path?
例如,在Linux下是/tmp
,而在XP C:\Documents and settings\[user]\Application settings\Temp
。
谢谢!
那将是tempfile模块。
它具有获取临时目录的function,还有一些快捷方式可以创build临时文件和目录,既可以是已命名的,也可以是未命名的。
例:
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
为了完整性,根据文档,以下是它如何search临时目录:
- 由
TMPDIR
环境variables命名的目录。 - 由
TEMP
环境variables命名的目录。 - 由
TMP
环境variables命名的目录。 - 平台特定的位置:
- 在RiscOS上 ,由
Wimp$ScrapDir
环境variables命名的目录。 - 在Windows上 ,依次为
C:\TEMP
,C:\TMP
,\TEMP
和\TMP
。 - 在所有其他平台上,依次为
/tmp
,/var/tmp
和/usr/tmp
。
- 在RiscOS上 ,由
- 作为最后的手段,当前的工作目录。
这应该做你想要的:
print tempfile.gettempdir()
对于我在Windows上的我,我得到:
c:\temp
并在我的Linux机器上得到:
/tmp
从@ nosklo的答案和添加一个半私人沙箱目录的重要位置目录:
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系统的应用程序类似。 他们只是使用较短的hex哈希和应用程序特定的前缀来“宣传”他们的存在。
我用:
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'
; 这是我不想要的!