我试图创建一个程序,其中有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 ='?'但我很困惑,我不知道该怎么做。
答案 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')