Python click 패키지를 사용하여 cli 프로그램 만들기
Python click 패키지를 사용하여 cli 프로그램 만들기
오늘은 Python에서의 command line interface 툴킷인 click 패키지에 대하여 알아보려 합니다.
개요
파이썬 데코레이터로 인하여 command line interface 프로그램을 만들 수 있습니다.
click 설치
우선 virtualenv로 파이썬 환경을 분리해줍니다.
1
pip3 install virtualenv
1
virtualenv -mvenv env
env라는 이름의 가상 환경을 생성합니다.
1
source env/bin/activate
가상환경을 폴더에서 활성화합니다.
1
pip install click
pip로 click을 설치합니다.
문서
1
2
3
4
5
6
7
8
9
10
11
import click
@click.command()
def hello():
"""This script prints hello."""
click.echo('Hello World!')
if __name__ == '__main__':
hello()
doc string으로 사용법을 명시할 수 있습니다.
1
2
3
4
5
6
Usage: main.py [OPTIONS]
This script prints hello.
Options:
--help Show this message and exit.
위와 같이 터미널에 작성해야 합니다.
command
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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를 추가할 수 있습니다.
1
2
3
4
5
6
7
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
add-user
위와 같이 터미널에 작성해야 합니다.
parameter
1
2
3
4
5
6
7
8
9
10
11
import click
@click.command()
@click.argument('name')
def hello(name):
click.echo('Hello %s!' % name)
if __name__ == '__main__':
hello()
인자를 통해 값을 받아올 수 있습니다.
1
2
3
4
Usage: main.py [OPTIONS] NAME
Options:
--help Show this message and exit.
위와 같이 터미널에 작성해야 합니다.
option
1
2
3
4
5
6
7
8
9
10
11
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()
옵션 이름이나 타입, 그리고 필수로 작성해야 하는지에 대한 여부 등을 설정할 수 있습니다.
1
2
3
4
5
Usage: main.py [OPTIONS]
Options:
-u, --url TEXT [required]
--help Show this message and exit.
위와 같이 터미널에 작성해야 합니다.
input
1
2
3
4
5
6
7
8
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 오류가 발생합니다.
This post is licensed under CC BY 4.0 by the author.