Dou*_*yle 40 python desktop-application application-settings
我有一个需要存储用户数据的python桌面应用程序.在Windows上,这通常是%USERPROFILE%\Application Data\AppName\在OSX上,通常是~/Library/Application Support/AppName/在其他*nix上通常~/.appname/.
标准库中存在一个函数os.path.expanduser,它将为我提供用户的主目录,但我知道在Windows上,至少"应用程序数据"已本地化为用户的语言.OSX也可能如此.
获取此位置的正确方法是什么?
更新: 一些进一步的研究表明,在OSX上获得这个的正确方法是使用函数NSSearchPathDirectory,但这是Cocoa,所以它意味着调用PyObjC桥...
Dou*_*yle 42
好吧,我讨厌回答我自己的问题,但似乎没有其他人知道.我要留下后人的答案.
APPNAME = "MyApp"
import sys
from os import path, environ
if sys.platform == 'darwin':
from AppKit import NSSearchPathForDirectoriesInDomains
# http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSSearchPathForDirectoriesInDomains
# NSApplicationSupportDirectory = 14
# NSUserDomainMask = 1
# True for expanding the tilde into a fully qualified path
appdata = path.join(NSSearchPathForDirectoriesInDomains(14, 1, True)[0], APPNAME)
elif sys.platform == 'win32':
appdata = path.join(environ['APPDATA'], APPNAME)
else:
appdata = path.expanduser(path.join("~", "." + APPNAME))
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以尝试使用QSettingsQt.您可以通过以下方式获取MyCompany/MyApp.ini文件的路径:
from PySide.QtCore import QSettings, QCoreApplication
QSettings.setDefaultFormat(QSettings.IniFormat)
QCoreApplication.setOrganizationName("MyCompany")
QCoreApplication.setApplicationName("MyApp")
settings = QSettings()
print(settings.fileName())
Run Code Online (Sandbox Code Playgroud)
或者,不改变任何全局状态:
QSettings(
QSettings.IniFormat, QSettings.UserScope,
"MyCompany", "MyApp"
).fileName()
Run Code Online (Sandbox Code Playgroud)
在Win7上你会得到类似的东西:
C:\Users\MyUser\AppData\Roaming\MyCompany\MyApp.ini
在Linux上(可能会有所不同):
/home/myuser/.config/MyCompany/MyApp.ini
我不知道OSX的可能结果(但我想).
QSettingsfunctionallity似乎很好,直到你想使用registerFormat,这在PySide中不可用,因此没有简单的方法来使用YAML或JSON编写器进行设置.