我需要一个临时目录,但我想完全控制它的创建和删除。
我将使用这个目录来放置我想要监视新提交的 git 存储库,因此我需要将它们永久存储在某个地方。
因此我想避免/tmp
dir,因为它可以被用户(?)清除。对此的最佳做法是什么?
tempfile.mkdtemp
将为您创建一个临时目录并返回其名称。它将/tmp
默认创建它(在类 Unix 系统上),但“以最安全的方式”并且仅对调用者的用户 ID 具有读/写/列表权限。
>>> d = tempfile.mktemp()
>>> with open(os.path.join(d, "secret")) as output:
... output.write("Ha, you can't read this!")
(顺便说一句,在具有默认设置的 Unix/Linux 系统上,用户不能只编辑或删除彼此的文件/tmp
。)
我想说最好的做法是使用tempfile.mkdtemp
.
如果你不想使用/tmp
then,你可以利用这个prefix
参数:
import tempfile
tempfile.mkdtemp(prefix=<your_preferred_directory>)
编辑:关于什么是最适合您的应用程序配置、缓存数据等的目录。如果您使用的是 linux,请查看XDG Base Directory Specification。
如果它真的是暂时的,请遵循 larmans 的建议并使用mkdtemp
.
如果它是某种必须在重启后仍然存在的半永久缓存,那么您应该使用由您的操作系统定义的本地应用程序目录(%APPDATA%、~/.local/ 等);一些工具包(例如 Qt)提供了以跨平台方式查找该文件夹的功能。
编辑:来自维基百科:
因此,您应该查找os.environ['APPDATA']
or os.environ['HOME']
,具体取决于平台(请参阅sys.platform
),然后附加您的应用程序名称,然后您可以在那里存储您想要的任何内容。
mydir = os.path.join( ".myAppName", "cache")
homeVar = 'HOME' # default for all *nix variants
if sys.platform == 'win32':
homeVar = 'APPDATA'
mydir = os.path.join( os.environ[homeVar], mydir)
通常程序使用一个~/.progname
目录来存储应该是持久的但应该“远离”用户的数据。
只是:您可能想查看 git commit hooks。这样,repo 不会监视 tmp 目录中的新提交(听起来很奇怪:谁会以有限的权限提交到 tmp 目录?),repo 会通知您有关提交,或者更具体地说,每当提交发生时自动运行脚本。
http://pypi.python.org/pypi/appdirs是一个提供跨平台user_cache_dir
功能的 Python 模块。