何处/如何将参数文件保存在* nix命令行实用程序中?

我在写一个小命令行工具。 它应该希望能够在OSX,UNIX和Linux上运行。

它需要在某个地方保存一些选项,比如在一个小的YAMLconfiguration文件中。 哪里可以保存这样的文件?

语言:Python 2.7
OS:* nix

我会避免把文件放在~目录中,因为它已经完全淹没了废话。 最近的趋势,至少在Ubuntu上,是使用~/.config/<appname>/作为你需要的任何点文件。 我真的很喜欢那个惯例。

通常,这些文件就像〜/ .rc(例如:〜/ .hgrc)。 这可能是一个文件的路径,或者如果你需要大量的配置设置的话,就是一个目录。

有关很好的描述,请参阅http://www.linuxtopia.org/online_books/programming_books/art_of_unix_programming/ch10s03.html

如果您的应用程序被命名为“someapp”,则将配置保存在$HOME/.someapp等文件中。 如果你喜欢,你可以给配置文件一个扩展名。 如果您认为您的应用程序可能具有多个配置文件,则可以使用目录$HOME/.someapp并在其中创建常规命名的(不隐藏的)文件。

许多跨平台工具在OS X上使用与Linux上相同的路径(以及其他POSIX /非Windows平台)。 使用POSIX位置的主要优点不是节省了几行代码,而是节省了Mac特定指令的需求,并允许Mac用户从社区的Linux用户那里获得帮助(无需转换他们的建议)。

另一种方法是将它们放在〜/ Library下的“Mac友好”位置。 使用Mac位置的主要优点基本上就是“苹果公司这么说” – 无论您打算如何对您的代码进行沙盒处理,在这种情况下,主要优势在于您可以这样做。

如果您选择使用库位置,则应阅读“文件系统编程指南”中的关于OS X文件系统和OS X库目录详细信息 ,但以下是简短版本:

  • 几乎所有的东西:创建一个子目录与您的应用程序的名称或捆绑ID(除非你想自己设置一个捆绑ID的方式,你会得到org.python.python,你不想…)〜/图书馆/应用支持。 理想情况下,您应该使用API​​,例如 – [NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]来获取路径; 如果没有,你必须手动处理像本地化,沙箱容器等。
  • 任何可以很容易地重新创建的东西(所以不需要备份,迁移等):一个同名的〜/ Library / Caches子目录。
  • 首选项:改为使用NSUserDefaults或CFPreferences API。 如果你使用自己的格式,那么“旧”的做法是在〜/ Library / Preferences下创建一个名为你的应用程序的名称或包ID的子目录,并把你的文件放在那里。 苹果公司不再建议,但并没有真正推荐一个替代品(短期“使用CFPreferences,该死!”); 许多应用程序(例如,Aquamacs)仍然以旧的方式做,但其他人却假装他们不是偏好,并将其存储在应用程序支持下。

在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)