可选关键字参数 - argparse

Optional keyword arguments - 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 = '?'但是我很困惑,我不知道该怎么做。

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

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')