Pass parameter to fabric task Pass parameter to fabric task python python

Pass parameter to fabric task


Fabric 2 task arguments documentation:

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


Fabric 1.X uses the following syntax for passing arguments to tasks:

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

You can read more about it in Fabric docs.


In Fabric 2, simply add the argument to your task function. For example, to pass the version argument to task deploy:

@taskdef deploy(context, version):    ...

Run it as follows:

fab -H host deploy --version v1.2.3

Fabric even documents the options automatically:

$ fab --help deployUsage: fab [--core-opts] deploy [--options] [other tasks here ...]Docstring:  noneOptions:  -v STRING, --version=STRING


Fabric 1.x arguments are understood with very basic string parsing, so you have to be a bit careful with how you send them.

Here are a few examples of different ways to pass arguments to the following test function:

@taskdef 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'})

I use double quote here to take the shell out of the equation, but single quotes may be better for some platforms. Also note the escapes for characters that fabric considers delimiters.

More details in the docs:http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments