[파이썬] argparse의 프로파일 관리

Python은 강력한 명령 줄 인터페이스(Command Line Interface, CLI)를 구축하기 위해 내장 모듈인 argparse를 제공합니다. argparse는 명령 줄에서 인자를 구문 분석하고 처리하는 기능을 제공하며, 프로그램의 인자 처리를 간편하게 만들어 줍니다. 이를 통해 사용자는 프로그램을 보다 쉽게 실행하고 조작할 수 있습니다.

하지만 큰 프로젝트에서는 많은 수의 옵션과 인자를 처리해야 할 수 있으며, 이를 효율적으로 관리하기 위해서는 프로파일(Profile) 시스템이 유용합니다. 프로파일은 여러 개의 미리 정의된 옵션 그룹을 하나의 이름으로 묶어서 사용할 수 있도록 해줍니다. 이를 통해 사용자는 특정한 프로파일을 선택하여 해당 프로파일에 속하는 옵션들을 쉽게 설정할 수 있습니다.

예제 코드

다음은 argparse를 사용하여 프로파일 관리 기능을 구현하는 예제 코드입니다. 우리는 add_argument() 메서드를 사용하여 다양한 옵션과 인자를 정의할 수 있습니다. 이후 add_argument_group() 메서드를 사용하여 옵션 그룹을 생성하고 해당 그룹에 옵션을 추가할 수 있습니다. 마지막으로 parse_args() 메서드를 호출하여 명령 줄 인자를 구문 분석하고 해당하는 옵션들을 처리합니다.

import argparse

# 프로파일 정의
profile1 = {
    'name': 'profile1',
    'options': [
        {'name': '-v', 'action': 'store_true', 'help': 'Verbose mode'},
        {'name': '-f', 'type': int, 'help': 'File size limit'}
    ]
}

profile2 = {
    'name': 'profile2',
    'options': [
        {'name': '-h', 'action': 'store_true', 'help': 'Enable help'},
        {'name': '-l', 'type': str, 'help': 'Log level'}
    ]
}

# 프로파일 그룹 생성
profile_group = argparse.ArgumentParser(add_help=False)
profile_subparsers = profile_group.add_subparsers(dest='profile_name')

# profile1 그룹
profile1_group = profile_subparsers.add_parser(profile1['name'], help='Profile 1 options')
for option in profile1['options']:
    profile1_group.add_argument(option['name'], **option)

# profile2 그룹
profile2_group = profile_subparsers.add_parser(profile2['name'], help='Profile 2 options')
for option in profile2['options']:
    profile2_group.add_argument(option['name'], **option)

# 메인 그룹
main_parser = argparse.ArgumentParser(description='Program options')
main_parser.add_argument('--debug', action='store_true', help='Enable debug mode')
main_parser.add_argument('--profile', action='store', choices=[profile1['name'], profile2['name']], help='Select a profile')
main_parser.add_argument('files', nargs='+', help='Input files')

# 프로파일과 메인 그룹 결합
main_parser._action_groups.append(profile_group)

# 명령 줄 인자 구문 분석
args = main_parser.parse_args()

# 옵션 처리
if args.debug:
    print('Debug mode enabled')

if args.profile:
    if args.profile == profile1['name']:
        print('Selected profile 1')
        if args.v:
            print('Verbose mode enabled')
        if args.f:
            print(f'File size limit: {args.f}')
    elif args.profile == profile2['name']:
        print('Selected profile 2')
        if args.h:
            print('Help enabled')
        if args.l:
            print(f'Log level: {args.l}')

files = args.files
print('Input files:', files)

실행 예제

python myprogram.py --debug --profile profile1 -v -f 100 file1.txt file2.txt

위의 실행 예제는 myprogram.py를 디버그 모드로 실행하고 profile1을 선택하며, 추가적으로 -v (Verbose mode)와 -f (File size limit) 옵션을 설정하는 것입니다. 이는 프로파일에 정의된 옵션들을 적용하고, 파일들을 입력으로 사용한다는 의미입니다.

결론

argparse의 프로파일 관리 기능은 복잡한 명령 줄 인터페이스를 간편하게 구축할 수 있도록 도와줍니다. 프로파일을 사용하면 사용자는 다양한 옵션들을 묶어 관리하고 선택적으로 적용할 수 있습니다. 이를 통해 코드의 가독성을 높이고, 사용자가 프로그램을 효율적으로 조작할 수 있도록 도와줍니다.