如果选择了一个选项,Argparse 禁用其他选项的官方方法
Argparse official way for disabling other option if one option is selected
如果-r
是,我打算给出彼此不相关的不同行为
给予或不给予。所以,如果 -r
参数存在,它将只需要两个
二。如果不是,它将吃掉所有给定的参数。使用此设置:
parser = ArgumentParser(prog='frog')
parser.add_argument('integer',
metavar='integer(s)',
type=int,
nargs='*')
parser.add_argument('-r', '--range',
metavar=('start', 'end'),
type=int,
nargs=2)
如果我打电话:
frog -r 123 1231 121
# this will give Namespace(integer=[123], range=[1231, 121])
如果我将 integer
的 nargs
更改为 *
,然后调用:
frog -r 123 1231
# complaints about 'integer' that is required
当然,创建简单的参数检查并不会太复杂。但是,我的问题是,如果另一个选项被激活,argparse
是否有官方方法来禁用一个选项?
if I change nargs for integer to *, and then call:
- 我想你的意思是 change nargs for integer to +
。在您的示例中,它已经是 *.
对于“+”,integer
期望找到至少一个参数。如果-r
没有遗漏任何东西,那么它就会抱怨。
argparse
的基本理念是独立处理每个参数。它还试图独立于顺序,因此 frog 123 -r 1231 32
与 frog -r 1231 32 123
.
一样有效
可以强制使用自定义 Action
类 参数之间的交互,但这往往会破坏顺序独立性。
通常最好写参数接受最一般的情况,然后自己检查。因此,我会坚持使用 *
,如果 args.integer
是错误的值数,我会反对。
argparse
的主要目的是弄清楚用户想要什么 - 它是一个解析器。事后你随时可以骂他们。
如果-r
是,我打算给出彼此不相关的不同行为
给予或不给予。所以,如果 -r
参数存在,它将只需要两个
二。如果不是,它将吃掉所有给定的参数。使用此设置:
parser = ArgumentParser(prog='frog')
parser.add_argument('integer',
metavar='integer(s)',
type=int,
nargs='*')
parser.add_argument('-r', '--range',
metavar=('start', 'end'),
type=int,
nargs=2)
如果我打电话:
frog -r 123 1231 121
# this will give Namespace(integer=[123], range=[1231, 121])
如果我将 integer
的 nargs
更改为 *
,然后调用:
frog -r 123 1231
# complaints about 'integer' that is required
当然,创建简单的参数检查并不会太复杂。但是,我的问题是,如果另一个选项被激活,argparse
是否有官方方法来禁用一个选项?
if I change nargs for integer to *, and then call:
- 我想你的意思是 change nargs for integer to +
。在您的示例中,它已经是 *.
对于“+”,integer
期望找到至少一个参数。如果-r
没有遗漏任何东西,那么它就会抱怨。
argparse
的基本理念是独立处理每个参数。它还试图独立于顺序,因此 frog 123 -r 1231 32
与 frog -r 1231 32 123
.
可以强制使用自定义 Action
类 参数之间的交互,但这往往会破坏顺序独立性。
通常最好写参数接受最一般的情况,然后自己检查。因此,我会坚持使用 *
,如果 args.integer
是错误的值数,我会反对。
argparse
的主要目的是弄清楚用户想要什么 - 它是一个解析器。事后你随时可以骂他们。