Argparse:具有默认值的互斥组
Argparse: mutually exclusive groups with defaults
也许有一个类似问题的答案,但我找不到。
我需要的
我有一个 table 可以读取:table 包含最新数据(快速),table 包含一天(天)的数据。
如果我在命令行中提供参数 -f,我想默认从 day-table 和 fast-table 读取。
然后我为每个参数设置默认值。
因此,如果我不提供任何参数(“-s”或“-f”),我想使用 "day" 和默认值。
如果我使用“-s 20161001”或“-f 1452557323”之类的东西,我想使用那个值。
如果使用“-f”,我想使用“-f”默认值。
我现在只有:
table_choice = parser.add_mutually_exclusive_group(required=True)
table_choice.add_argument(
'-s', '--day-table',
dest='day',
help='day table data',
default="path/" + day(),
)
table_choice.add_argument(
'-f', '--fast-table',
dest='fast',
help='fast table data',
default=fast(),
)
但遗憾的是它并没有像我想要的那样工作。
"script -f" returns:
Script: error: argument -f/--fast-table: expected one argument
只有在我提供了一个值时才有效。
如果 nargs='?'
,那么您将获得 3 种方式的操作 - 默认值、常量或值。
table_choice.add_argument(
'-f', '--fast-table',
dest='fast',
help='fast table data',
default=fast(),
nargs='?',
const='value_if_noarg'
)
这个 nargs
与互斥组(包括 'required' 组)配合得很好。
通过创建组 required
,您将不得不使用 -s
或 -f
。省略 required=True
是您想要两者都不使用的选项。
命名空间将具有 day
和 fast
的值,无论命令行中的内容如何。如果您希望 day
值具有 fast
值的优先级,请选择 defaults
以便您可以区分默认值和给定值。默认的 default None
很方便。
您可以使用 default=argparse.SUPPRESS
将默认值保留在命名空间之外,但这比 args.fast is None
.
更难测试
如 中所述,您的论点甚至可以共享 dest
。这是否使以下逻辑更容易值得怀疑。
也许有一个类似问题的答案,但我找不到。
我需要的
我有一个 table 可以读取:table 包含最新数据(快速),table 包含一天(天)的数据。
如果我在命令行中提供参数 -f,我想默认从 day-table 和 fast-table 读取。
然后我为每个参数设置默认值。 因此,如果我不提供任何参数(“-s”或“-f”),我想使用 "day" 和默认值。 如果我使用“-s 20161001”或“-f 1452557323”之类的东西,我想使用那个值。 如果使用“-f”,我想使用“-f”默认值。
我现在只有:
table_choice = parser.add_mutually_exclusive_group(required=True)
table_choice.add_argument(
'-s', '--day-table',
dest='day',
help='day table data',
default="path/" + day(),
)
table_choice.add_argument(
'-f', '--fast-table',
dest='fast',
help='fast table data',
default=fast(),
)
但遗憾的是它并没有像我想要的那样工作。 "script -f" returns:
Script: error: argument -f/--fast-table: expected one argument
只有在我提供了一个值时才有效。
如果 nargs='?'
,那么您将获得 3 种方式的操作 - 默认值、常量或值。
table_choice.add_argument(
'-f', '--fast-table',
dest='fast',
help='fast table data',
default=fast(),
nargs='?',
const='value_if_noarg'
)
这个 nargs
与互斥组(包括 'required' 组)配合得很好。
通过创建组 required
,您将不得不使用 -s
或 -f
。省略 required=True
是您想要两者都不使用的选项。
命名空间将具有 day
和 fast
的值,无论命令行中的内容如何。如果您希望 day
值具有 fast
值的优先级,请选择 defaults
以便您可以区分默认值和给定值。默认的 default None
很方便。
您可以使用 default=argparse.SUPPRESS
将默认值保留在命名空间之外,但这比 args.fast is None
.
如 dest
。这是否使以下逻辑更容易值得怀疑。