我正在编写一个小命令行实用程序。它应该能够在OSX,UNIX和Linux上运行。
它需要在某处保存一些首选项,例如在一个小的YAML配置文件中。 哪个人会保存这样的文件?
语言:Python 2.7
操作系统:* nix
答案 0 :(得分:4)
通常,这些文件会像〜/ .rc一样(例如:〜/ .hgrc)。如果您需要大量配置设置,这可以是文件的路径,也可以是目录。
有关详细说明,请参阅http://www.linuxtopia.org/online_books/programming_books/art_of_unix_programming/ch10s03.html
答案 1 :(得分:3)
如果您的应用程序名为“someapp”,则将配置保存在$HOME/.someapp
等文件中。如果您愿意,可以为配置文件提供扩展名。如果您认为您的应用可能有多个配置文件,则可以使用目录$HOME/.someapp
并在其中创建常规命名(非隐藏)文件。
答案 2 :(得分:3)
我会避免将文件放在~
目录中,因为它已经完全充满了垃圾。最近的趋势,至少在ubuntu上,是使用~/.config/<appname>/
来表示你需要的任何点文件。我非常喜欢那种惯例。
答案 3 :(得分:1)
许多跨平台工具在OS X上使用与在Linux(以及其他POSIX /非Windows平台)上相同的路径。使用POSIX位置的主要优点是不需要保存几行代码,而是节省了对Mac特定指令的需求,并允许Mac用户从社区中的linux用户那里获得帮助(无需翻译他们的建议) )。
另一种选择是将它们放在〜/ Library下的“Mac友好”位置。使用Mac位置的主要优点基本上是“Apple这么说” - 无论你打算沙箱代码,在这种情况下主要的优点是你可以这样做。
如果您选择使用库位置,则应阅读文件系统编程指南中的About the OS X File System和OS X Library Directory Details,但这是简短版本:
在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)