python でちょっとしたツールを書くときに便利。 make みたいにタスクを定義して、コマンドラインから実行する。 task として定義した関数の引数に応じてコマンドライン引数をさばけるので argparse せずにすませることができる。

install

$ pip install invoke

tasks.py

from invoke import task

@task
def hello(c, who="hoge"):
    '''
    hello task
    '''
    print(f'hello {hoge}')


@task(hello)
def ver(c):
    '''
    version
    '''
    print(sys.version)

使う

$ invoke -l           
Available tasks:

  hello   hello task
  ver     version

$ invoke hello --help
Usage: inv[oke] [--core-opts] hello [--options] [other tasks here ...]

Docstring:
  hello task

Options:
  -w STRING, --who=STRING

$ invoke hello fuga  
No idea what 'fuga' is!
$ invoke hello -w fuga
hello fuga
$ invoke ver
hello hoge
3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]

vscode でデバッグ

module に invoke を設定してやる

        {
            "name": "task",
            "type": "python",
            "request": "launch",
            "module": "invoke",
            "args": [
                "hello"
            ],
            "console": "integratedTerminal"
        }