我意识到这是像很多在两个相互排斥的选项Python的使用argparse模块设置默认选项 ,尽管从不同的角度(并给予有似乎没有帮助的答案)。
码块(解析器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语句将不得不也更改顺序)。