tol*_*ien 10 python arguments command-line-arguments argparse
我意识到这很像使用argparse模块在Python中设置两个互斥选项的默认选项,尽管从不同的角度来看(并且给出的答案似乎没有帮助).
代码块(解析器是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()
Run Code Online (Sandbox Code Playgroud)
如果没有--show
或--insert
指定我想默认为--show
(因此default=True
),但如果--insert
被使用,则opts.show
仍设置为true(因为默认的),尽管是一个互斥块的一部分.
当前代码检查在测试是否opt.show
为True 时没有设置任何其他选项,即:
if opts.show and not opts.insert:
do_something()
elif opts.insert:
do_something_else()
Run Code Online (Sandbox Code Playgroud)
但是这不会扩展(当您添加--delete
到互斥组时会发生什么,等等)所以我正在寻找一种更好的方法来使其他变量变为opts.show
false,同时仍然将其作为默认值.
阅读argparse文档,我认为自定义操作将是可行的方法,但无法看到如何从内部访问互斥组的其他成员(理论是我可以迭代它们,并翻转默认值,如果剩下的任何一个都设定了).另一种选择是反转if条件,但这似乎是不清洁的(如果默认更改,if语句的顺序也必须改变).
mgi*_*son 20
在我看来,这'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)
Run Code Online (Sandbox Code Playgroud)
现在您可以args.mutex
用来确定要执行的操作.