我使用名为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']))
答案 0 :(得分:0)
将字符串传递给模仿通常如何将参数传递给函数将无法正常工作,正如您所观察到的那样。
将arg_action
字典中的单独键值对传递到credstash.getSecret
函数的相应参数。
credstash.getSecret(arg_action['name'], table=arg_action['table'])
答案 1 :(得分:0)
您可以将位置参数存储在列表中,将关键字参数存储在dict中,然后单独传递每个集合。
pos_args = ['TEST_CREDSTASH']
kw_args = dict(table="perf-accounts-credentials-store")
credstash.getSecret(*pos_args, **kw_args)
列表和字典本身可以是单个列表或元组的元素:
args = (['TEST_CREDSTASH'], {"table": "perf-accounts-credentials-store"})
credstash.getSecret(*args[0], **args[1])