【发布时间】:2018-04-08 08:36:25
【问题描述】:
我在script.py中有以下代码:
import argparse
parser = argparse.ArgumentParser()
sp = parser.add_subparsers(dest='command')
sp.default = 'a'
a_parser = sp.add_parser('a')
b_parser = sp.add_parser('b')
a_parser.add_argument('--thing', default='thing')
b_parser.add_argument('--nothing', default='nothing')
args = parser.parse_args()
print(args)
我可以用三种不同的方式来称呼它:
$ python3 script.py
Namespace(command='a')
$ python3 script.py a
Namespace(command='a', thing='thing')
$ python3 script.py b
Namespace(command='b', nothing='nothing')
这只有一个问题:我想要的是,如果我在命令行上提供零参数,那么a_parser 将成为最终解析和执行操作的那个。显然不是,sp.default 只是设置command='a',不是我所期望的,也就是说,“哦,是的,用户没有在命令行上提供任何参数,但我知道这应该被处理a_parser。这里是Namespace(command='a', thing='thing')!”
有没有办法让我可以用 argparse 做到这一点?我已经寻找了一些不同的选择,但它们似乎都没有真正提供我所追求的。我想我可以制作 3 个不同的 ArgumentParsers,然后将参数传递给每个参数,虽然这听起来有点恶心。
还有更好的选择吗?
【问题讨论】: