doit
python 으로 여러개의 tool 들을 만들어 놓으니 정신이 없다. 이녀석들을 한곳에서 실행하고 싶었다. 약간 nodejs 의 gulp/grunt 같은 느낌으로 말이다.
그래서 보니, doit 이 그런 역할을 한다고 하는 듯 해서 한 번 시도해 본다.
설치
pip install doit
사용
기본적으로 doit 이라고 치면 실행이 된다.(csv2sql) c:\cvs2sql>doit ERROR: Could not find dodo file 'c:\Users\namh\mine\programming\beluga\cvs2sql\dodo.py'. Please use '-f' to specify file name.
위에서 보듯이 file 을 설정해 주지 않으면, 기본적으로 dodo.py 라는 file 을 찾아서 실행하게 된다.
일단 task_ 로 시작하는 함수(def) 를 만들면 된다. 그러면 doit 에서 알아서 task 로 인식한다. 이 def 는 dict 를 return (또는 yield)해야 한다.
# coding=utf-8
# dodo.py
def task_mine():
"""my task"""
def my_hello_1(targets):
print(targets)
def my_hello_2(targets):
print(targets)
return {
'actions': [(my_hello_1, ['arg1']), (my_hello_2, ['arg1'])],
'targets': ["hello.txt"],
}
아래처럼 실행된 task 의 이름이 보여진다.
(csv2sql) c:\cvs2sql>doit
. mine
특정 task 만 실행하려면 doit <task> 로 하면 된다.
(csv2sql) c:\cvs2sql>doit mine
. mine
doit list
(csv2sql) c:\cvs2sql>doit list mine update my task
doit list 를 통해서 어떤 task 들이 있는지 확인할 수 있다.
task
task 는 위의 예제처럼 작성하면 된다. return 에 'actions' 이 꼭 들어가야 한다. 이 녀석들 doit 이 실행해 준다. 이 actions 은 아래처럼 2가지 종류가 있다.- action 의 종류
- python-action: function 을 넘겨주면 된다.
- shell-command : string 으로 된 값은 shell-command 로 인식한다.
argument
task 실행할 때 argument 를 받을 수 있다. (자세한 것은 여기를 참고하자.)# coding=utf-8 # dodo.py def task_mine(): """my task description"""
def my_hello_1(flagOneFile): print(flagOneFile) return { 'params': [{ 'name': 'flagOneFile', 'long': 'onefile', 'short': 'one', 'type': bool, 'default': True, 'inverse': 'severalfile', 'help': 'This flags make task output with one-file', }], 'actions': [(my_hello_1, )], }
c:\..\src>doit help mine mine my task description -one, --onefile This flags make task output with one-file --severalfile opposite of --onefile
댓글 없음:
댓글 쓰기