我正在编写一个小型命令行实用程序。它应该能够在 OSX、UNIX 和 Linux 上运行。
它需要在某个地方保存一些首选项,例如在一个小的 YAML 配置文件中。将这样的文件保存在哪里?
语言:Python 2.7
操作系统:*nix
通常,这些文件位于 ~/.rc 之类的地方(例如:~/.hgrc)。如果您需要大量配置设置,这可能是文件的路径或目录的路径。
有关详细说明,请参见http://www.linuxtopia.org/online_books/programming_books/art_of_unix_programming/ch10s03.html
如果您的应用程序被命名为“someapp”,您可以将配置保存在一个文件中,例如$HOME/.someapp
. 如果你愿意,你可以给配置文件一个扩展名。如果您认为您的应用程序可能有多个配置文件,您可以使用该目录$HOME/.someapp
并在其中创建常规命名(非隐藏)文件。
我会避免将文件放在~
目录中,因为它完全被垃圾淹没了。至少在 ubuntu 上,最近的趋势是~/.config/<appname>/
用于您需要的任何点文件。我真的很喜欢那个约定。
许多跨平台工具在 OS X 上使用与在 linux(和其他 POSIX/非 Windows 平台)上相同的路径。使用 POSIX 位置的主要优势不是节省几行代码,而是节省了对 Mac 特定指令的需求,并允许 Mac 用户从社区中的 linux 用户那里获得帮助(无需翻译他们的建议)。
另一种选择是将它们放在 ~/Library 下的“Mac-friendly”位置。使用 Mac 位置的主要优势基本上是“Apple 这么说”——除非您打算对代码进行沙箱化,在这种情况下,主要优势是您可以这样做。
如果您选择使用库位置,您应该阅读文件系统编程指南中的关于 OS X 文件系统和OS X 库目录详细信息,但这里是简短版本:
在 Python 中,它的工作方式如下(省略错误处理,并假设您按名称而不是为自己设置捆绑 ID):
from Foundation import *
fm = NSFileManager.defaultManager()
appsupport = (fm.URLForDirectory_inDomain_appropriateForURL_create_error_(
NSApplicationSupportDirectory, NSUserDomainMask, None, True, None)[0].
URLByAppendingPathComponent_isDirectory_(
appname, True))
caches = (fm.URLForDirectory_inDomain_appropriateForURL_create_error_(
NSCachesDirectory, NSUserDomainMask, None, True, None)[0].
URLByAppendingPathComponent_isDirectory_(
appname, True))
prefs = NSUserDefaults.persistentDomainForName_(appname)