我有一些代码可以解析名为“ blah.py”的文件中的一些参数:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('opt', nargs='?')
parser.add_argument('--bool', action='store_true')
parser.add_argument('value')
args = parser.parse_args()
如果我这样调用该文件:
blah.py a b --bool
它正常工作(opt ='a',value ='b',bool = True)。
但是,如果我以其他顺序调用它:
blah.py a --bool b
我希望得到相同的结果,但是argparse模块正在打印error: unrecognized arguments: b
消息。这是argparse模块的错误吗?为什么会这样工作?在为脚本定义CLI时,如何避免遇到此类问题?
由于我的界面比示例复杂得多(具有子命令和更多的参数),因此我有多种方法来调用该界面,该界面要求某些参数对于某些调用是可选的,而对于其他调用则是必选的。我计划手动验证这些情况,并在错误调用parser.print_usage并退出。
答案 0 :(得分:1)
您可能想看看argparser的“混合”选项
https://docs.python.org/3/library/argparse.html#intermixed-parsing
否则,位置参数始终位于可选参数之前。