업데이트 :이 답변에는 여전히 문제가 있습니다. 예를 들어 required
인수를 처리 할 수없고 어색한 구성 구문이 필요합니다. 대신 ConfigArgParse 는이 질문이 요구하는 것과 정확히 같으며 투명한 드롭 인 대체품입니다.
현재의 한 가지 문제 는 구성 파일의 인수가 유효하지 않은 경우 오류가 발생하지 않는다는 것입니다. 다음은 다른 단점이있는 버전입니다 . 키에 --
또는 -
접두사 를 포함해야 합니다.
다음은 파이썬 코드입니다 ( MIT 라이센스가있는 Gist 링크 ) :
import argparse
import configparser
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--config_file', help='config file')
args, left_argv = parser.parse_known_args()
if args.config_file:
with open(args.config_file, 'r') as f:
config = configparser.SafeConfigParser()
config.read([args.config_file])
parser.add_argument('--arg1', help='argument 1')
parser.add_argument('--arg2', type=int, help='argument 2')
for k, v in config.items("Defaults"):
parser.parse_args([str(k), str(v)], args)
parser.parse_args(left_argv, args)
print(args)
다음은 구성 파일의 예입니다.
[Defaults]
--arg1=Hello!
--arg2=3
자, 달리기
> python main.py --config_file config_correct.conf --arg1 override
Namespace(arg1='override', arg2=3, config_file='test_argparse.conf')
그러나 구성 파일에 오류가있는 경우 :
--arg1=Hello!
--arg2='not an integer!'
스크립트를 실행하면 원하는대로 오류가 발생합니다.
> python main.py --config_file config_invalid.conf --arg1 override
usage: test_argparse_conf.py [-h] [--config_file CONFIG_FILE] [--arg1 ARG1]
[--arg2 ARG2]
main.py: error: argument --arg2: invalid int value: 'not an integer!'
가장 큰 단점은 parser.parse_args
ArgumentParser에서 오류 검사를 얻기 위해 다소 해킹을 사용 하지만 이에 대한 대안을 알지 못합니다.