默认值设置为false,如果另一个互斥的说法是真实的(Set the default to fals

2019-07-31 09:53发布

我意识到这是像很多在两个相互排斥的选项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语句将不得不也更改顺序)。

Answer 1:

它发生,我认为也许是'store_const'将是一个更合适的动作(有指向同一个目的地的所有参数)。

import argparse
parser = argparse.ArgumentParser()
mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_const", 
    dest="mutex", const="show")
mutex_group.add_argument("--insert", action="store_const", 
    dest="mutex", const="insert")
mutex_group.add_argument('--delete', action="store_const",
    dest="mutex", const="delete")


parser.set_defaults(mutex='show')
args = parser.parse_args()
print(args)

现在你可以使用args.mutex找出要执行的操作。



文章来源: Set the default to false if another mutually exclusive argument is true