我知道这很像Setting default option in Python of two mutually exclusive options using the argparse module,尽管从不同的角度(以及给出的答案似乎没有帮助)。如果另一个互斥参数为真,则将默认值设置为假
码块(解析器argparse.ArgumentParser的一个实例):
mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_true",
dest="show", default=True)
mutex_group.add_argument("--insert", action="store_true",
dest="insert")
opts = parser.parse_args()
如果既未--show
或--insert
指定欲默认为--show
(因此default=True
),但如果--insert
被使用,则opts.show
仍设置为true(因为默认),尽管它是互斥块的一部分。
当前的代码将检查没有其它选项已经被设置测试opt.show
是否属实,当即:
if opts.show and not opts.insert:
do_something()
elif opts.insert:
do_something_else()
但这并不规模(会发生什么,当你添加--delete
的互斥组等),所以我正在寻找一种更好的方式,使其他变量的默认值为opts.show
,同时仍将其设置为默认值。
阅读argparse文档,我认为一个自定义操作将是路要走,但无法看到如何从内部访问互斥组的其他成员(理论是我可以遍历它们,并且如果其余设置中的任何一个被设置,则翻转默认值)。 另一种选择是改变if条件,但似乎不清楚(如果默认更改,if语句的顺序也必须改变)。