使用argparse添加标志以提供选项列表

时间:2017-06-07 17:52:47

标签: python

我编写了这个程序,使用flag --list提供选项列表。所以,我想使用--list来提供所有选项,而当我使用--list --ex时,我只想提供选项列表的一部分。

这是程序 -

import argparse
import sys
options = {
    'external': {
        },
    'internal': {
        }
}


def print_list(value):
    l1 = []
    l2 = []

    for k, v in options.iteritems():
        if k == "external":
            for opt, val in options["external"].iteritems():
                l1.append(opt)
        elif k == "internal":
            for opt,val in options["internal"].iteritems():
                l2.append(opt)
    if value == "external":
        return l1

    elif value == "internal":
        return l2
    elif value == "all":
        return l1 + l2

parser = argparse.ArgumentParser(
    description="Testing argparse"
    )

parser.add_argument("--list", action = "store_true")
parser.add_argument("--ex", action = "store_true")
parser.add_argument("--in", action = "store_true")
args = parser.parse_args(sys.argv[1:])

if args.list:
    val = print_list("all")
    for items in val:
        print items

if  not args.list and args.ex:
    parser.error("You need to provide list option")

if args.ex:
    val = print_list("external")
    for items in val:
        print items

所以当我这样做时, - list --ex我得到所有选项,加上外部选项。而当我输入--list --ex时,我只想要外部选项。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

--list放在命令行上将args.list设置为True,并将--ex放在命令行中也会args.ex True。您的代码检查args.list并发现它是真的,因此它打印出所有选项。然后它检查args.ex,它也是True,因此它打印出外部选项。

答案 1 :(得分:0)

if args.list and args.external:
    val = print_list("external")
    for items in val:
        print items


elif args.list:
    val = print_list("all")
    for items in val:
        print items

我只是对代码进行了一些小改动,并且能够达到我想要的效果,谢谢。