我在写一个小命令行工具。 它应该希望能够在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库目录详细信息 ,但以下是简短版本:
在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)