我需要一个临时目录,但我想完全控制它的创建和删除。
我将使用此目录放置我想要监视新git存储库的新提交,因此我需要将它们永久存储在某处。
因此我想避免使用/tmp
dir,因为它可以被用户清除(?)。这是什么最好的做法?
答案 0 :(得分:8)
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
编辑或删除其他人的文件。)
答案 1 :(得分:8)
我认为最佳做法是使用tempfile.mkdtemp
。
如果您不想使用/tmp
,那么您可以利用prefix
参数:
import tempfile
tempfile.mkdtemp(prefix=<your_preferred_directory>)
编辑:关于什么是最适合应用程序配置,缓存数据等的目录。如果您使用的是Linux,请查看XDG Base Directory Specification。
答案 2 :(得分:2)
如果它确实是暂时的,请遵循拉曼语的建议并使用mkdtemp
。
如果它是某种必须在重新启动后继续存在的半永久性缓存,那么您应该使用操作系统定义的本地应用程序目录(%APPDATA%,〜/ .local / etc);一些工具包(例如Qt)提供了以跨平台方式查找该文件夹的功能。
编辑:来自维基百科:
因此,您应该查看os.environ['APPDATA']
或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)
答案 3 :(得分:1)
http://pypi.python.org/pypi/appdirs是一个Python模块,提供跨平台user_cache_dir
功能。
答案 4 :(得分:0)
通常,程序使用~/.progname
目录来存储应该是持久的数据但应该保持“不在用户”的数据。
答案 5 :(得分:0)
只是一个:你可能想看看git commit hooks。这样,而不是监视一个tmp目录的新提交(听起来很奇怪:谁将提交到具有有限权限的tmp目录?)repo通知你有关提交,或者更具体地说,每当提交发生时自动运行脚本。