我想要一个执行以下操作的开关:
我可以使用nargs='?'
而不是3来执行1和2:
group.add_argument('--my_switch', nargs='?', dest='myswitch', default=False, const=True)
print(args.myswitch)
>python myscript.py
>False
>python myscript.py --my_switch
>True
>python myscript.py --my_switch foo
>foo
>python myscript.py --my_switch foo bar
>error: unrecognized arguments: bar
我可以使用nargs='+'
而不是2:
group.add_argument('--my_switch', nargs='+', dest='myswitch', default=False)
print(args.myswitch)
>python myscript.py
>False
>python myscript.py --my_switch
>argument --my_switch: expected at least one argument
>python myscript.py --my_switch foo
>['foo']
>python myscript.py --my_switch foo bar
>['foo', 'bar']
我可以用nargs='*'
完成1和3但差不多2:
group.add_argument('--my_switch', nargs='+', dest='myswitch', default=False)
print(args.myswitch)
>python myscript.py
>False
>python myscript.py --my_switch
>[]
>python myscript.py --my_switch foo
>['foo']
>python myscript.py --my_switch foo bar
>['foo', 'bar']
argparse是否提供了解决方案?我无法const
或+
使用*
。
一种解决方法是使用nargs='*'
并设置
if isinstance(args.myswitch, list) and len(args.myswitch) == 0:
args.myswitch = True
但似乎这应该是提供内置方法的常见情况。