Python click 패키지를 사용하여 cli 프로그램 만들기

오늘은 Python에서의 command line interface 툴킷인 click 패키지에 대하여 알아보려 합니다.

개요

파이썬 데코레이터로 인하여 command line interface 프로그램을 만들 수 있습니다.

click 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip install click

pip로 click을 설치합니다.

문서

import click


@click.command()
def hello():
    """This script prints hello."""
    click.echo('Hello World!')


if __name__ == '__main__':
    hello()

doc string으로 사용법을 명시할 수 있습니다.

Usage: main.py [OPTIONS]

  This script prints hello.

Options:
  --help  Show this message and exit.

위와 같이 터미널에 작성해야 합니다.

command

import click


@click.group()
def cli():
    pass


@click.command()
def add_user():
    click.echo('Added User.')


cli.add_command(add_user)

if __name__ == '__main__':
    cli()

command를 추가할 수 있습니다.

Usage: main.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  add-user

위와 같이 터미널에 작성해야 합니다.

parameter

import click


@click.command()
@click.argument('name')
def hello(name):
    click.echo('Hello %s!' % name)


if __name__ == '__main__':
    hello()

인자를 통해 값을 받아올 수 있습니다.

Usage: main.py [OPTIONS] NAME

Options:
  --help  Show this message and exit.

위와 같이 터미널에 작성해야 합니다.

option

import click


@click.command()
@click.option('--url', '-u', 'arg', required=True, type=str)
def url_check(arg):
    click.echo('URL: %s' % arg)


if __name__ == '__main__':
    url_check()

옵션 이름이나 타입, 그리고 필수로 작성해야 하는지에 대한 여부 등을 설정할 수 있습니다.

Usage: main.py [OPTIONS]

Options:
  -u, --url TEXT  [required]
  --help          Show this message and exit.

위와 같이 터미널에 작성해야 합니다.

input

import click

value = click.prompt('Please enter a integer', type=int)

try:
    click.confirm('Do you want to continue?', abort=True)
except click.exceptions.Abort as e:
    pass

prompt와 confirm을 통해 사용자의 입력을 받을 수 있습니다.

confirm에서 abort가 참일 경우에는 click.exceptions.Abort 오류가 발생합니다.

Written on April 9, 2019