モジュールで使用される構成ファイルを使用してアプリケーションを作成していConfigParser
ます。この設定ファイルは、実際には に保存されてい%APPDATA%/PressLogReader/PressLogReader.conf
ます。
しかし、問題は、%APPDATA%/PressLogReader
(および構成ファイル) がアプリケーションの最初の起動時に存在しないため、アプリがクラッシュすることです。
アプリケーションのインストール時にフォルダを作成できるかもしれませんが%APPDATA%/PressLogReader
、それは悪い解決策だと思います。
より良い解決策はありますか?
私のConfクラスがあります:
APP_DIRNAME = 'PressLogReader'
if 'APPDATA' in os.environ:
APP_CONFIG_PATH = os.path.join(os.environ['APPDATA'], APP_DIRNAME)
elif 'XDG_CONFIG_HOME' in os.environ:
APP_CONFIG_PATH = os.path.join(os.environ['XDG_CONFIG_HOME'], APP_DIRNAME)
else:
APP_CONFIG_PATH = os.path.join(os.environ['HOME'], '.config', APP_DIRNAME)
APP_CONF_FILE = os.path.join(APP_CONFIG_PATH, 'PressLogReader.conf')
class Config :
def __init__(self) :
self.parser = ConfigParser.ConfigParser()
params = {
'logFile': 'C:\Program Files\syslog\log\messages',
'filterByIP': False,
'IpFilter': ''
}
if not os.access(APP_CONF_FILE, os.F_OK | os.W_OK) :
self.parser.add_section('general')
for arg in params:
self.parser.set('general', arg, params[arg])
self.write()
self.parser.read(APP_CONF_FILE)
self.getLogFile()
self.getFilterByIp()
self.getIpFilter()
def write(self) :
with open(APP_CONF_FILE, 'wb') as conf_file:
self.parser.write(conf_file)
def getLogFile(self) :
try :
self.log_file = self.parser.get('general', 'logFile')
except ConfigParser.NoSectionError :
self.parser.add_section('general')
self.parser.set('general', 'logFile', params['logFile'])
except ConfigParser.NoOptionError :
self.parser.set('general', 'logFile', params['logFile'])
finally :
self.log_file = params['logFile']
def getFilterByIp(self) :
try :
self.filter_by_ip = self.parser.getboolean('general', 'filterByIP')
except ConfigParser.NoSectionError :
self.parser.add_section('general')
self.parser.set('general', 'filterByIP', params['filterByIP'])
except ConfigParser.NoOptionError :
self.parser.set('general', 'filterByIP', params['filterByIP'])
finally :
self.filter_by_ip = params['filterByIP']
def getIpFilter(self) :
try :
self.ip_filter = self.parser.get('general', 'IpFilter')
except ConfigParser.NoSectionError :
self.parser.add_section('general')
self.parser.set('general', 'IpFilter', params['IpFilter'])
except ConfigParser.NoOptionError :
self.parser.set('general', 'IpFilter', params['IpFilter'])
finally :
self.ip_filter = params['IpFilter']