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