[컴][파이썬] doit

task runner on python / python gulp / grunt



doit


python 으로 여러개의 tool 들을 만들어 놓으니 정신이 없다. 이녀석들을 한곳에서 실행하고 싶었다. 약간 nodejs 의 gulp/grunt 같은 느낌으로 말이다.

그래서 보니, doit 이 그런 역할을 한다고 하는 듯 해서 한 번 시도해 본다.



설치

pip install doit

pytest 관련해서는 windows 에서 문제가 있어서 따로 설치를 해줘야 한다는 듯이 이야기하는데, 일단 나랑 관련이 없어서 skip 한다. 자세한 것은 여기를 참고하자.



사용

기본적으로 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 의 종류
    1. python-action: function 을 넘겨주면 된다.
    2. 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 





Reference

  1. GitHub - pydoit/doit: task management & automation tool



댓글 없음:

댓글 쓰기