我有一本字典ex:vars={key:value}
。我需要传递完整的字典对象,即在python中的结构脚本中的变量。
目前我传递的字典键运行正常: -
local('fab -f path/file.py functionName: %(key)s ' %vars)
但是我需要传递vars字典对象而不是它的密钥。
答案 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