https://blog.sicara.com/perfect-python-command-line-interfaces-7d5d4efad6a2
위의 저자는 Data Science Project를 개발하는 개발자로서 Python comman-line interface를 많이 사용한다고 한다. 그래서 python이 제공하는 두가지 library를 활용해서 편의성과 팀 생산성을 향상시킬 수 있는 방법에 대해 소개한다.
나의 경우 주로 테스트를 위해 Python CLI를 사용하는데 매일 헛갈리는 부분이 사실 sys.argv를 이용하는데 어떻게 써야하는지 헛갈리고, 몇번째에 써야하는지도 파일을 결국 열어보고 확인해야하는 불편함이 있었다.
해당 글을 읽으면서 이러한 불편함을 해소할수 있는 방법을 찾은것 같아 한번 정리해보려고 한다.
The "beginners" method
일반적으로는 sys.argv를 이용해서 사용한다.
sys.argv에는 아래와 같이 list 형태로 정보들이 들어가게 되어 진짜 각각의 key (--filter, --phase)를 뽑아내려면
$ python test_runner.py --filter category1/ --phase 'QA'
['test_runner.py', '--filter', 'category1/', '--phase', 'QA']
아래와 같이 복잡한 코드로 for 문을 돌아가면 해당 key name이 있는지 찾아내어야 한다.
그래서 보통 귀챦아서 개발자들끼리 index를 약속해서 차례대로 하나씩 뽑아 내서 사용한다. ^^;;
argparse
python library로 제공되는 argparse를 이용하면 custom한 option 을 추가할수 있다.
https://docs.python.org/ko/3/howto/argparse.html
결과는 아래와 같다. name space에 추가된것을 확인할수 있다.
$ python test_runner_argparse.py --filter category1/ --phase QA
Namespace(email=False, excel=False, filter='category1/', phase='QA')
categofy1/ False False QA
$ python test_runner_default.py --help
usage: test_runner_default.py [-h] [--filter FILTER] [--email EMAIL]
[--excel EXCEL] [--phase PHASE]
optional arguments:
-h, --help show this help message and exit
--filter FILTER, --f FILTER
test를 실행한 파일 필터 : category1/, category2/device1,
common etc..
--email EMAIL, --e, EMAIL
test 를 실행할 phase : QA/OP/ST
--excel EXCEL
--phase PHASE
Click
python library click을 사용해서 로직을 분리하자
https://click.palletsprojects.com/en/7.x/
아래와 같이 argparse와 동일하게 나오는것을 알 수 있다. 특히 type을 알아서 보여주는것은 더 좋은것 같다.
$ python test_runner.py --filter category1/ --no-email
['test_runner.py', '--filter', 'category1/', '--no-email']
filter:category1/, excel:False, email:False, phase:QA
$ python test_runner.py --help
Usage: test_runner.py [OPTIONS]
Options:
--filter, --f TEXT test를 실행한 파일 필터 : category1/, category2/device1,
common etc..
--phase, --p TEXT test 를 실행할 phase : QA/OP/ST
--email / --no-email email 을 보낼지 말지 선택하는 옵션, 명시안하면 False
--excel / --no-excel excel로 결과를 변환할 지 여부, 명시안하면 False
--help Show this message and exit.
TQDM
추가로 Progress를 보여주는 tqdm을 소개했는데 내 입장에서는 딱히 쓸데가 없어서 사용법만 확인하고 넘어간다.
$ pip install tqdm
https://pypi.org/project/tqdm/
'자습' 카테고리의 다른 글
Flask, Flask-RESTPlus, and Swagger UI (0) | 2019.10.09 |
---|---|
Django vs. Flask (1) | 2019.09.28 |
pre-commit 활용하기 (0) | 2019.08.31 |
파이썬 클린 코드 CH3. 좋은 코드의 일반적인 특징 (0) | 2019.08.17 |
AWS Lambda@Edge (0) | 2019.08.10 |