Передать параметром в целевой ткани


как я могу передать параметр в задачу fabric при вызове " fab " из командной строки? Например:

def task(something=''):
    print "You said %s" % something
$ fab task "hello"
You said hello

Done.

можно ли это сделать без подсказки с fabric.operations.prompt?

3 109

3 ответа:

Fabric 2 аргументы задачи документация:

http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments


ткани 1.X использует следующий синтаксис для передачи аргументов задачи:

 fab task:'hello world'
 fab task:something='hello'
 fab task:foo=99,bar=True
 fab task:foo,bar

вы можете прочитать больше об этом в Fabric docs.

вам нужно передать все переменные Python в виде строк, особенно если вы используете подпроцесс для запуска скриптов, или вы получите ошибку. Вам нужно будет преобразовать переменные обратно в типы int / boolean отдельно.

def print_this(var):
    print str(var)

fab print_this:'hello world'
fab print_this='hello'
fab print_this:'99'
fab print_this='True'

Аргументы Fabric понимаются с помощью очень простого синтаксического анализа строк, поэтому вам нужно быть немного осторожным с тем, как вы их отправляете.

вот несколько примеров различных способов передачи аргументов в функцию тест:

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