临时目录在程序运行期间保持不变

时间:2012-01-09 13:30:38

标签: python tempdata tempdir

我需要一个临时目录,但我想完全控制它的创建和删除。

我将使用此目录放置我想要监视新git存储库的新提交,因此我需要将它们永久存储在某处。

因此我想避免使用/tmp dir,因为它可以被用户清除(?)。这是什么最好的做法?

6 个答案:

答案 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)提供了以跨平台方式查找该文件夹的功能。

编辑:来自维基百科:

  • HOME(类Unix)和USERPROFILE(Microsoft Windows) - 指示在哪里 用户的主目录位于文件系统中。
  • HOME / {。AppName}(类Unix)和APPDATA {DeveloperName \ AppName} (Microsoft Windows) - 用于存储应用程序设置。许多人开放 源程序错误地使用USERPROFILE进行应用程序设置 在Windows中 - USERPROFILE只应在允许的对话框中使用 用户可在文件/图片/下载/音乐等路径中进行选择, 出于编程目的,使用APPDATA(漫游),LOCALAPPDATA或 PROGRAMDATA(在用户之间共享)

因此,您应该查看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通知你有关提交,或者更具体地说,每当提交发生时自动运行脚本。