2 つの構成ファイルの 3 つの異なる場所から特定のパスを読み取る必要があります。
- グローバルなもの、
/etc/program.conf
- 地元のもの、
~/.config/program/config
ローカルのものには[DEFAULT]
セクションがあり、ケースごとに特定のセクションがある場合とない場合があります[case]
。そうしたいです。
- ローカル構成のケース固有のセクションで指定されたパスを読み取ります
- それがない場合は、ローカル構成のデフォルト セクションで指定されたパスを読み取ります
- それがない場合は、グローバル構成によって指定されたパスを読み取ります
- それがない場合 (!)、デフォルト パスを指定します
私はconfigparser
Pythonで使用しています。これは実際には難しい問題ではありませんが、私が思いついた解決策は、洗練されておらず不格好だと思います。これはかなり一般的な状況だと思うので、より経験豊富なプログラマーにもっと良い解決策を求めるべきだと思いました。
私が持っているコードはこれです:
def retrieve_download_path(feed):
download_path = os.path.expanduser('~/Downloads')
config = configparser.ConfigParser()
if os.path.isfile(CONFIG_FILENAME_GLOBAL):
config.read(CONFIG_FILENAME_GLOBAL)
if config.has_option('DEFAULT','Download directory'):
download_path = os.path.expanduser(config['DEFAULT']['Download directory'])
if os.path.isfile(CONFIG_FILENAME_USER):
config.read(CONFIG_FILENAME_USER)
if config.has_option(feed,'Download directory'):
download_path = os.path.expanduser(config[feed]['Download directory'])
elif config.has_option('DEFAULT','Download directory'):
download_path = os.path.expanduser(config['DEFAULT']['Download directory'])
return download_path
どうすればこれを改善できますか? さまざまな構成ファイルを調達する通常の方法は何ですか?