[파이썬] argparse와 기타 파서 라이브러리 비교

파이썬에서 명령 줄 인터페이스를 구축하기 위해 argparse 와 같은 파서 라이브러리를 사용하는 것은 일반적입니다. 하지만 argparse 가 유일한 파서 라이브러리는 아닙니다. 이 글에서는 argparse 와 다른 파서 라이브러리인 clickdocopt 와의 비교를 통해 이들의 장단점을 알아보겠습니다.

argparse


argparse 는 Python 표준 라이브러리로, 명령 줄 인터페이스를 파싱하고 처리하는 강력한 도구입니다. argparse 는 사용하기 쉽고 강력한 기능을 제공하며, 다양한 옵션 처리 방식을 지원합니다. 복잡한 CLI 프로그램을 작성할 때 argparse 는 매우 유용한 선택지입니다.

argparse 를 사용하는 예제 코드:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

위 코드는 간단한 숫자들의 합을 계산하는 CLI 프로그램입니다.

click


click 는 argparse 와 같이 명령 줄 인터페이스를 처리하는 데 사용되는 파서 라이브러리입니다. click 은 사용하기 쉽고 직관적인 API 를 제공하며, argparse 보다 더 간결한 코드를 작성할 수 있습니다. click 은 명령어와 옵션을 작성하기 위해 데코레이터 형태를 사용합니다.

click 을 사용하는 예제 코드:

import click

@click.command()
@click.argument('name')
@click.option('--greeting', default='Hello', help='Greeting message')
def greet(name, greeting):
    click.echo(f'{greeting}, {name}!')

if __name__ == '__main__':
    greet()

위 코드는 이름을 입력받아 인사하는 간단한 CLI 프로그램입니다.

docopt


docopt 는 문서를 기반으로 자동으로 명령 줄 인터페이스를 생성하는 파서 라이브러리입니다. docopt 는 특정 형식의 독문서를 작성하여 매개변수를 자동으로 처리합니다. docopt 를 사용하면 명령어 및 옵션의 상호 작용 및 사용법을 문서 자체에서 얻을 수 있습니다.

docopt 를 사용하는 예제 코드:

"""
Usage:
  program.py add <a> <b>
  program.py subtract <a> <b>
  program.py mul <a> <b>
  program.py div <a> <b>

Options:
  -h --help     Show this screen.
"""

from docopt import docopt

if __name__ == '__main__':
    args = docopt(__doc__)
    
    if args['add']:
        result = args['<a>'] + args['<b>']
    elif args['subtract']:
        result = args['<a>'] - args['<b>']
    elif args['mul']:
        result = args['<a>'] * args['<b>']
    elif args['div']:
        result = args['<a>'] / args['<b>']

    print(result)

위 코드는 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 CLI 프로그램입니다.

결론


argparse, click, docopt 모두 훌륭한 명령 줄 파서 라이브러리이지만, 어떤 라이브러리를 선택할지는 개발자의 필요에 따라 다를 수 있습니다.

개발 중인 프로젝트에 가장 적합한 라이브러리를 선택하여 효율적인 CLI 인터페이스를 구축하세요.