3

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

def test(names):
  print names

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

默认情况下可以在织物中执行此操作,还是我需要传递一个字符串并自己拆分它?

谢谢!

4

2 回答 2

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

于 2013-10-15T17:16:50.820 回答
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'
于 2014-05-21T17:23:09.687 回答