将字符串列表传递给Fabric任务

时间:2013-10-14 18:37:55

标签: python fabric

我想将一个字符串列表作为参数传递给一个Fabric任务。例如,对于以下fabfile:

def test(names):
  print names

我想通过“fab test:[tom,dick,harry]”并将列表打印出来。

默认情况下是否可以在结构中执行此操作,或者我是否需要传递字符串并自行拆分?

谢谢!

2 个答案:

答案 0 :(得分:9)

一种方法是使用位置参数:

@task
def mytask(*args):
    print args

然后以这种方式调用它:

$ fab mytask:foo,bar,baz
('foo', 'bar', 'baz')

请注意,您将参数作为元组而不是列表获取,但这不会产生很大的不同。

如果这对你不起作用而且你需要更多花哨的东西,你可能不得不自己解析这些论点。

请参阅:http://docs.fabfile.org/en/1.8/usage/fab.html#per-task-arguments

答案 1 :(得分:5)

Fabric似乎总是将列表或元组扩展为单个参数,所以这就是我所做的:

def test(names):
    if isinstance(names, basestring):
        names = names.split(";")
    for name in names:
        # do something for every name...

这样,通过编程方式,我仍然可以将一个列表或元组名称传递给此函数,出于测试目的,我可以在命令行上将它们指定为由分号分隔的字符串:

fab -f fabfile.py test:'tom;dick;harry'