【发布时间】:2021-08-08 04:05:16
【问题描述】:
我有以下代码:
import argparse
parser = argparse.ArgumentParser(description='do stuff')
TOP = parser.add_mutually_exclusive_group(required=True)
#
TOP.add_argument('--interactive', action="store_true")
noninteractive = TOP.add_argument_group()
##
noninteractive.add_argument('--required1', required=True, type=float)
noninteractive.add_argument('--required2', required=True, type=float)
##
noninteractive_excl = noninteractive.add_mutually_exclusive_group(required=True)
noninteractive_excl.add_argument('--mutuallyexcl1', default=None, type=float)
noninteractive_excl.add_argument('--mutuallyexcl2', default=None, type=float)
args = parser.parse_args()
我的程序应该是这样工作的:
您可以使用选项--interactive(然后会要求用户逐步输入数据)或一组包含运行程序所需的所有选项的参数来调用它。该组和--interactive 应互斥。
然后该组有两个必需的选项和两个相互排斥的选项。
我的期望是,当使用--interactive 调用时,程序不会要求任何其他参数,因为它们属于第一个互斥组的一部分。
相反,当我用
python dostuff.py --interactive
我收到以下消息:
dostuff.py: error: the following arguments are required: --required1, --required2
我做错了什么,我该如何解决? 非常感谢。
【问题讨论】:
-
我认为它被抛弃是因为您的互斥组包含一个参数和另一个组。建议使用子解析器。也许这会有所帮助:stackoverflow.com/a/52865331/843953
-
子解析器是我研究过的东西,但如果我理解正确,这意味着我已经用
dostuff.py interactive --somearg调用了这个函数。相反,我希望能够简单地使用dostuff.py --interactive。
标签: python python-3.x command-line-arguments argparse