我想将一个字符串列表作为参数传递给一个Fabric任务。例如,对于以下fabfile:
def test(names):
print names
我想通过“fab test:[tom,dick,harry]”并将列表打印出来。
默认情况下是否可以在结构中执行此操作,或者我是否需要传递字符串并自行拆分?
谢谢!
答案 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'