如何在python中的fabric方法中传递整个字典作为参数

时间:2018-03-07 19:14:21

标签: python python-2.7 fabric

我有一本字典ex:vars={key:value}。我需要传递完整的字典对象,即在python中的结构脚本中的变量。

目前我传递的字典键运行正常: -

local('fab -f path/file.py functionName: %(key)s ' %vars)

但是我需要传递vars字典对象而不是它的密钥。

1 个答案:

答案 0 :(得分:0)

你应该使用Python的json module,它可以轻松地将字典转换为字符串,反之亦然:

  • 首先,在您调用fab命令的文件中,以常规格式{keys:values}声明字典,然后将其转换为str。当您编写fab时,请确保字符串化字典被单引号括起来:

local('fab -f fabfile.py function_name:\'{}\''.format(json.dumps(dictionary)))

  • 然后在你的函数function_name(str_dictionary)中,添加第一行,将来自你shell命令的字符串转换为dict:

real_dictionary = json.loads(str_dictionary)

快速评论总结:

不是使用fab函数调用local命令(这实际上不是Fabric的精神),而是应该将function_name放在与文件相同的文件中。你打电话给它(或者你甚至可以import)。然后,您可以使用Fabric的execute函数,它允许您以编程方式执行任务,而不是在shell中。此外,execute可以将函数的参数作为参数!这样,您可以将常规字典作为参数传递给function_name:

execute(function_name, {keys:values})

您可以阅读有关execute here

的更多信息