IT/OS|Network|Script
Python config.ini 보다 입력받은 옵션을 더 우선시 하기
박모
2023. 9. 14. 18:09
728x90
configparser 를 통해 argument를 파싱하고 비슷한 것을 config.ini 에 넣어 두었다고 가정
이때 config.ini 를 먼저 읽어서 argument쪽에 넣고 argument를 다시 읽으면 되는데, 이때 문제가 parser가 초기화를 한다.
그래서 무식한 방법이지만 default 에 넣는 방식으로 다음과 같이 처리하면 된다.
이때 형변환 부분이 있을 수 있는데, 이 부분은 아직 고려 하지 않았다.
예제소스
test.py
import configparser
import argparse
def loadConfig(cfgfile):
my_cfg = configparser.RawConfigParser()
my_cfg.optionxform = str
my_cfg.read(cfgfile)
return my_cfg
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Deep Packet Clustering Manager.')
parser.add_argument('--cfgfile', required=False, type=str
, default="config.ini", help='config file')
parser.add_argument('--loglevel', required=False, type=str
, default='warning'
, help='Provide logging level. Example --loglevel debug, default=warning')
args = parser.parse_args()
my_cfg = loadConfig(args.cfgfile)
default_args_dict = { }
print("Before", args)
for cur_args in my_cfg['args']:
default_args_dict[cur_args] = my_cfg.get('args', cur_args)
parser.set_defaults(**default_args_dict)
# ini > option (input) overwrite
args = parser.parse_args()
print("After", args)
config.ini 샘플
[args]
loglevel=info
workdir=
실행결과
$ python test.py
Before Namespace(cfgfile='config.ini', loglevel='warning')
After Namespace(cfgfile='config.ini', loglevel='info', workdir='')
$ python test.py --loglevel='debug'
Before Namespace(cfgfile='config.ini', loglevel='debug')
After Namespace(cfgfile='config.ini', loglevel='debug', workdir='')
728x90