回答:
ファブリック2タスク引数のドキュメント:
http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments
Fabric 1.Xは、タスクに引数を渡すために次の構文を使用します。
fab task:'hello world'
fab task:something='hello'
fab task:foo=99,bar=True
fab task:foo,bar
詳細については、Fabricのドキュメントをご覧ください。
hello world
は必要だと思われますか?
world
が新しいタスクであると考えるので、引用符はおそらくその例で必要です。
'hello world'
Pythonの文字列は'hello world'
になりますが、"hello world"
結果はhello world
(おそらくほとんどの人が望むものです)になります。
bar=True
in bar='True'
boolean値ではないファブリックコマンドが渡されます
ファブリックの引数は非常に基本的な文字列解析で理解されるため、それらの送信方法には少し注意する必要があります。
次のテスト関数に引数を渡すさまざまな方法の例をいくつか示します。
@task
def test(*args, **kwargs):
print("args:", args)
print("named args:", kwargs)
$ fab "test:hello world"
('args:', ('hello world',))
('named args:', {})
$ fab "test:hello,world"
('args:', ('hello', 'world'))
('named args:', {})
$ fab "test:message=hello world"
('args:', ())
('named args:', {'message': 'hello world'})
$ fab "test:message=message \= hello\, world"
('args:', ())
('named args:', {'message': 'message = hello, world'})
ここでは二重引用符を使用してシェルを方程式から外していますが、プラットフォームによっては単一引用符の方が適している場合があります。また、ファブリックが区切り文字と見なす文字のエスケープにも注意してください。
ドキュメントの詳細:http : //docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
ファブリック2では、タスク関数に引数を追加するだけです。たとえば、version
引数をtask に渡すにはdeploy
:
@task
def deploy(context, version):
...
次のように実行します。
fab -H host deploy --version v1.2.3
ファブリックはオプションを自動的に文書化します:
$ fab --help deploy
Usage: fab [--core-opts] deploy [--options] [other tasks here ...]
Docstring:
none
Options:
-v STRING, --version=STRING
誰かがfabric2のあるタスクから別のタスクにパラメーターを渡そうとしている場合は、そのために環境ディクショナリを使用します。
@task
def qa(ctx):
ctx.config.run.env['counter'] = 22
ctx.config.run.env['conn'] = Connection('qa_host')
@task
def sign(ctx):
print(ctx.config.run.env['counter'])
conn = ctx.config.run.env['conn']
conn.run('touch mike_was_here.txt')
そして実行します:
fab2 qa sign