Подтвердить что ты не робот

Передача параметра в задание на ткань

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

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

Done.

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

4b9b3361

Ответ 2

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

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

@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

Ответ 3

Вам нужно передать все переменные 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'

Ответ 4

Если кто-то хочет передать параметры из одной задачи в другую в 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