【发布时间】:2018-03-15 18:15:35
【问题描述】:
我正在使用一个名为 credstash 的模块,其中包含此功能:
def getSecret(name, version="", region=None,
table="credential-store", context=None,
dynamodb=None, kms=None, **kwargs):
我想将一个字符串传递给要作为位置和关键字参数进行评估的函数。
所以我有一个名为 arg_action 的变量,其内容如下:
TEST_CREDSTASH, table=perf-accounts-credentials-store
我想做这样的事情:
credstash.getSecret(arg_action)
问题在于它抓取了arg_action 的全部内容,而不是将它们解释为位置参数name 和关键字参数table
credstash.ItemNotFound: Item {'name': 'TEST_CREDSTASH, table=perf-accounts-credentials-store'} couldn't be found.
有没有办法实现我想要的?我不想对函数的参数进行硬编码,因为我有几个 credstash 函数,每个函数都有不同的参数
我最终这样解决了我的问题:
def credstash_action(key_id, table_name, action, args):
action_list = {
"get": "getSecret",
"getall": "getAllSecrets",
"list": "listSecrets",
"put": "putSecret",
"putall": "putAllSecretsAction"
}
function_list = {
"getSecret": get_credstash_secret,
"getAllSecrets": get_all_credstash_secrets,
}
cred_action = action_list.get(action)
cred_function = getattr(credstash, cred_action)
args_string = " ".join(args)
function_list.get(cred_action)(function=cred_function, key_id=key_id, table_name=table_name, args=args_string)
def get_credstash_secret(**kwargs):
print(kwargs['function'](kwargs['args'], table=kwargs['table_name']))
def get_all_credstash_secrets(**kwargs):
print(kwargs['function'](table=kwargs['table_name']))
【问题讨论】:
标签: python