可选的关键字参数 - argparse

时间:2016-05-21 14:57:27

标签: python python-3.x argparse

我试图创建一个程序,其中有3个不同的关键字参数输入选项(用户必须选择其中一个):

1)第一个是当用户输入两个整数时,所以程序将被调用如下:

python myProgram.py -s 3 -p 9

2)第二个是当用户输入1和0的字符串时:

python myProgram.py -r 1101011010

3)第三个输入与第二个输入相同,但它存储在不同的变量

python myProgram.py -l 1101011010

我该如何实现?我读过关于argparse和nargs ='?'但我很困惑,我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

您可以使用mutual exclusion创建3个选项(并根据需要标记该组)。如果-s存在,您必须手动测试是否使用了-p,但是:

parser = argparse.ArgumentParser(prog='PROG')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-s', type=int)
parser.add_argument('-p', type=int)

def binary(value):
    # just test if the value is a valid binary string
    try:
        int(value, 2)
    except ValueError:
        raise argparse.ArgumentTypeError('{!r} is not a valid binary value'.format(value))
    return value

group.add_argument('-r', type=binary)

group.add_argument('-l', type=binary)

args = parser.parse_args()
if args.s and args.p is None:
    parser.error('You must use -p when -s is selected')