Invoke
基本
tasks.pyにタスクを記述する
code:py
import invoke
@invoke.task
def hello(c):
c.run('echo hello')
タスクの実行
$ invoke task1
$ inv task1
省略可
$ inv task1 task2
タスクを続けて実行できる
定義したタスクを一覧表示する
$ inv -l
定義したタスクのヘルプを確認する
$ inv task -h
メモ
引数にヘルプを追加する
code:py
@invoke.task(help={'option1': 'ヘルプ内容'})
def task1(c, optoin1):
...
定義したタスクを別のタスクの実行前に呼び出す
code:py
@invoke.task(task1, task2)
def task3(c):
...
実行後に呼び出す方法はあるが、使ったら読みづらくなりそうだから私は使わないrmaruon.icon
一度に実行するすべてのタスクの引数に同じ値を与えたい
やりたいことのイメージ
code:py
@invoke.task
def hello(c, name):
print(f'hello, {name}')
@invoke.task
def bye(c,name):
print(f'bye, {name}')
$ inv all john
code:結果
hello john
bye john
同じ引数を渡すのはできなさそうなので、別タスクを作って関数として呼び出すしかなさそう(要調査)
code:py
@invoke.task
def all(c, name):
hello(c, name)
bye(c, name)
カラーで表示する
code:py
c.run(command, pty=True)
パス解決
inv はカレントディレクトリにtasks.pyがなくても実行できる
カレントディレクトリから親の階層に遡ってtasks.pyが見つかるまで探していると思う(要出典)
適当に動かしてみている限りではそんな挙動だった
tasks.pyで以下のように記述して使ってるrmaruon.iconˆ
code:py
import os
ROOT_DIR = os.path.dirname(__file__)
CONFIG_DIR = os.path.join(ROOT_DIR, 'config')