Python argparse 与可选参数互斥
Python argparse mutually exclusive with optional arguments
我的要求是用 argparse 实现如下:
script.py <command> (-a|--first-name [--middle-name] [--last-name])
基本上,脚本会接受一个强制参数,它可以有不同的值。然后是另一个参数,它应该是 -a 或 --first-name。
那么名字可以有更多的参数。
我正在探索子解析器和互斥组,但不知道如何实现这个
我处理这个问题的一种粗略方法是
parser = argparse.ArgumentParser(prog='myscript', usage='%(prog)s <command> (-a|--first-name [--middle-name] [--last-name])')
parser.add_argument('command')
mxgroup = parser.add_mutually_exclusive_group(required=True)
mxgroup.add_argument('-a', action='store_true', help='Choose all')
mxgroup.add_argument('--first-name', dest='fname')
parser.add_argument('--middle-name', dest='mname')
parser.add_argument('--last-name', dest='lname')
args = parser.parse_args()
if (args.mname or args.lname) and not args.fname:
parser.error('middle and last names may be specified with first name only')
但我在想,如果这些检查可以由 argparse 固有地处理,那么随着脚本的增长,我将不必重做它
如有任何帮助,我们将不胜感激
解析后测试值一点也不粗鲁。 mutually exclusive group
所做的只是格式化 usage
(您可能已经看过),并针对一组 'already-seen' 操作测试组中的每个参数。没有嵌套或复合逻辑测试,只是一个简单的、平面的 xor
.
我建议 ('--name', nargs='+', help='name - first [last [middle]]')
一种论点。也就是说,为 name
接受一个或多个字符串。结果将是一个列表,您可以轻松地将其解析为 3 个部分。它甚至允许您用户指定一个由 4 部分组成的名称,或者那些贵族的 10 部分名称之一。
一些边栏问题对此进行了更详细的探讨,例如
Python argparse mutual exclusive group
我的要求是用 argparse 实现如下:
script.py <command> (-a|--first-name [--middle-name] [--last-name])
基本上,脚本会接受一个强制参数,它可以有不同的值。然后是另一个参数,它应该是 -a 或 --first-name。 那么名字可以有更多的参数。
我正在探索子解析器和互斥组,但不知道如何实现这个
我处理这个问题的一种粗略方法是
parser = argparse.ArgumentParser(prog='myscript', usage='%(prog)s <command> (-a|--first-name [--middle-name] [--last-name])')
parser.add_argument('command')
mxgroup = parser.add_mutually_exclusive_group(required=True)
mxgroup.add_argument('-a', action='store_true', help='Choose all')
mxgroup.add_argument('--first-name', dest='fname')
parser.add_argument('--middle-name', dest='mname')
parser.add_argument('--last-name', dest='lname')
args = parser.parse_args()
if (args.mname or args.lname) and not args.fname:
parser.error('middle and last names may be specified with first name only')
但我在想,如果这些检查可以由 argparse 固有地处理,那么随着脚本的增长,我将不必重做它
如有任何帮助,我们将不胜感激
解析后测试值一点也不粗鲁。 mutually exclusive group
所做的只是格式化 usage
(您可能已经看过),并针对一组 'already-seen' 操作测试组中的每个参数。没有嵌套或复合逻辑测试,只是一个简单的、平面的 xor
.
我建议 ('--name', nargs='+', help='name - first [last [middle]]')
一种论点。也就是说,为 name
接受一个或多个字符串。结果将是一个列表,您可以轻松地将其解析为 3 个部分。它甚至允许您用户指定一个由 4 部分组成的名称,或者那些贵族的 10 部分名称之一。
一些边栏问题对此进行了更详细的探讨,例如
Python argparse mutual exclusive group