데이터 분석을 하시는 분들은 jupyter notebook
이라는 키워드가 익숙하실 겁니다. Django 또는 Flask로 웹 개발을 하시는 분들은 django-admin startproject
, flask run
과 같은 명령어를 많이 쳐보셨을 겁니다. 파이썬으로 이런 명령어 프로그램은 어떻게 만드는 걸까요? 오늘은 파이썬으로 커맨드 라인 프로그램을 만드는 법을 알아보겠습니다.
argparse
모듈
먼저 파이썬 표준 라이브러리에서 제공하는 모듈인 argparse
에 대해 알아보겠습니다.
우선 다음과 같이 hello 폴더에 똑같은 hello 폴더를 만들고 안에 __init__.py
파일과 main.py
파일을 만들어줍니다.
main.py
에는 다음과 같이 입력합니다.
# hello/main.py
# argparse 모듈 임포트
import argparse
def hello(name):
print("Hello, {}".format(name))
def main():
parser = argparse.ArgumentParser()
# name argument 추가
parser.add_argument('name')
args = parser.parse_args()
name = args.name
hello(name)
if __name__ == "__main__":
main()
위와같은 코드를 짠 다음 커맨드창에서 python main.py SJQuant
라고 입력해봅시다.
$ python main.py SJQuant
아래와 같은 결과가 나올것입니다.
>> Hello, SJQuant
기본적으로 --help 옵션 또한 제공해줍니다.
$ python main.py --help
>>
usage: main.py [-h] name
positional arguments:
name
optional arguments:
-h, --help show this help message and exit
(click_tutorial) E:\dev\python-cli\ex1>python main.py --help
usage: main.py [-h] name
positional arguments:
name
optional arguments:
-h, --help show this help message and exit
add_argument
메소드에 help
키워드 인자를 넣으면 설명을 추가할 수 있습니다.
...
parser.add_argument('name', help="Write name you want to say Hello.")
...
$ python main.py --help
>>
...
positional arguments:
name Write name you want to say Hello.
...
이 외에도 다양한 옵션을 추가할 수 있습니다.
import argparse
import sys
def hello(name):
print("Hello, {}".format(name))
def bye(name):
print('Good bye, {}'.format(name))
def main():
parser = argparse.ArgumentParser()
# nargs: arguments의 수
# ? -> arg가 없으면 default값으로
parser.add_argument(
'name', nargs='?', default=False, help="Write name you want to say Hello.")
# 버전확인 옵션추가
# action: 해당 argument가 추가될 때 일어나는 액션 (여기서는 version을 true로)
parser.add_argument('-v', '--version', action="store_true",
help="Show version of this program")
# 둘 중 하나만 사용할 수 있는 옵션
# --hello 또는 --bye 둘 중 하나만을 사용할 수 있음
group = parser.add_mutually_exclusive_group()
group.add_argument('--hello', action="store_true", help="say hello")
group.add_argument('--bye', action="store_true", help="say good bye")
args = parser.parse_args()
name = args.name
if args.version:
print('1.0.0')
sys.exit()
if not name:
parser.print_help()
sys.exit()
# bye 옵션이 있다면
# say goodbye
if args.bye:
bye(name)
else:
hello(name)
if __name__ == "__main__":
main()
$ python main.py --version
>> 1.0.0
$ python main.py SJQuant --hello
>> Hello, SJQuant
$ python main.py SJQuant --bye
>> Good bye, SJQuant
setup.py
정의
하지만 아직 명령어 프로그램을 사용하기 위해서는 해당 폴더에 가서 python main.py
라는 명령어를 입력해주어야 합니다. hello sjquant
와 같이 사용하기 위해서는 setup.py
파일을 작성하고 설치해주어야 합니다.
main.py
의 상위 폴더와 동등한 위치(사진참고)에 setup.py
파일을 만들고 다음과 같이 입력해줍니다.
from setuptools import setup, find_packages
setup(
# 모듈명
name='hello',
# 버전
version='1.0.0',
author='SJQuant',
author_email='seonujang92@gmail.com',
description='Greet someone',
packages=find_packages(),
# 여기가 중요합니다.
entry_points={
"console_scripts": [
# hello라는 명령어를 실행하면
# hello모듈 main.py에서 main함수를 실행한다는 의미입니다.
"hello = hello.main:main"
]
},
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
],
)
그런 다음 setup.py
파일이 있는 경로에서 다음 명령어를 실행해주면 모듈 설치가 진행됩니다. (주의할 점: 가상환경에서 설치를 진행하면 해당 명령어 또한 설치한 가상환경에서만 사용할 수 있습니다. 전역에서 사용하고 싶다면 루트 파이썬이 있는 폴더에 설치해야 합니다.)
$ python setup.py install
이제 hello
명령어를 커맨드라인에서 사용할 수 있습니다.
$ hello --help
>>
usage: hello [-h] [-v] [--hello | --bye] [name]
positional arguments:
name Write name you want to say Hello.
optional arguments:
-h, --help show this help message and exit
-v, --version Show version of this program
--hello say hello
--bye say good bye
$ hello sjquant --hello
>> Hello, sjquant
$ hello sjquant --bye
>> Good bye, sjquant
더 공부하기
파이썬 공식문서를 확인하면 argparse
의 다양한 옵션과 사용법을 보실 수 있습니다. 또한, 웹에서 영상 또는 이미지같은 미디어를 스크래핑하는 커맨드라인 프로그램 you-get
의 common.py
(클릭)를 살펴보는 것도 실제 argparse
의 활용법을 익히는데 많은 도움이 될 거 같습니다. (커맨드 라인과 관계없는 코드들도 나오니 argparse를 검색하셔서 보는 것을 권장합니다.)
click
argparse
뿐만이 아니라 click
모듈도 많이 사용됩니다. click
모듈은 argparse
에서 제공하는 기능을 보다 쉽고, decorator
를 사용해 보다 깔끔하게 사용할 수 있게 해줍니다. Flask
에서 CLI(Command Line Interface)
를 구현하기 위해 사용한 모듈이기도 합니다. click
에 대한 설명은 2편에서 다루도록 하겠습니다.
'개발 > 파이썬' 카테고리의 다른 글
파이썬 크롤링 공부, 도움받은 자료 모음 (0) | 2019.03.21 |
---|---|
파이썬으로 만드는 나만의 커맨드라인 프로그램 #2 - click (1) | 2019.03.10 |
파이썬과 비동기 프로그래밍 #3, 파이썬에서 비동기 프로그래밍 활용하기 (14) | 2019.03.01 |
파이썬과 비동기 프로그래밍 #2, 파이썬에서 비동기 프로그래밍 시작하기 (0) | 2019.03.01 |
파이썬과 비동기 프로그래밍 #1, 비동기 프로그래밍이란 (0) | 2019.03.01 |