使用argparse中的位置参数作为函数名

时间:2012-12-31 13:05:37

标签: python argparse

我已经设置了一个带有argparse的脚本,它给了我以下NameSpace:

Namespace(action='list', input='all', target='domain')

我已经制作了一些根据位置调用的函数,目前我有一个工作情况,通过调用它们像这样的代码:

if args.action == 'list':
    if len(sys.argv) == 2:
        parser.print_help()
        sys.exit(0)
elif args.target == 'domain':
    domain_list()
elif args.target == 'forwarding':
    forwarding_list()
elif args.target == 'transport':
    transport_list()
elif args.target == 'user':
    user_list()
else:
    all_list()

我知道这可以做得更好,比这更好;但由于我对Python的了解有限,我似乎无法想出这一点。

回顾:我想要的东西,如果可能的话(伪代码)

if args.action == 'add':
    target = args.target
    target_add()

其中target_add()类似于domain_add()

提前致谢!

1 个答案:

答案 0 :(得分:0)

听起来行动可能是listadd,而target可能是domainforwardingtransport或{{ 1}}。是的,如果必须手动列出每个选项组合的作用,最终会得到很多user代码。

以下是一种简化此方法的方法:

  • 使用itertools.product生成所有可能的组合 选项。
  • 使用白名单调度dict将选项映射到函数。密钥是2元组,例如if..then..else('domain','list')。值是关联的函数对象。

('transport','add')