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