如何在 Python3 中使用 argparse 从两组命令行参数中解析出一组?
How to parse one group out of the two groups of command line arguments using argparse in Python3?
我想开发一个 CLI,将两对参数中的一个参数放在一起:
group-resources --limit 5
或
group-overlap --groups group1,group2
组资源是位置性的,需要限制。其余两者的规则相同。
但是,我当前的代码强制要求全部四个。
我当前的代码:
import argparse
import analysis
import cleanup
import etl
import initialize_db
parser = argparse.ArgumentParser(
description='Inventory DB for Cloud Infrastructure')
parser.add_argument(
'group-resources', help='List top k groups as per their memory, disk, and cpu count.')
parser.add_argument(
'--limit', help='Number of groups in descending order of their resources.', type=int, required=True)
parser.add_argument(
'group-overlap', help='Fetch nodes that belong in both the groups')
parser.add_argument(
'--groups', help='specify the group names separated by a comma.', type=str, required=True
)
args = parser.parse_args()
print(args)
当我 运行 python3 cli.py group-resources --limit 5
时,出现以下错误:
usage: cli.py [-h] --limit LIMIT --groups GROUPS group-resources group-overlap
cli.py: error: the following arguments are required: group-overlap, --groups
我希望如果我提供组资源和限制,或者如果我提供组重叠和组,那么我的代码应该可以工作。不允许有其他排列。我该怎么做?
我们可以使用subparsers。以下是我们如何对您的代码进行轻微修改。
import argparse
parser = argparse.ArgumentParser(
description='Inventory DB for Cloud Infrastructure')
subparsers = parser.add_subparsers(help='types of arguments')
group_resources_parser = subparsers.add_parser("group-resources", help='List top k groups as per their memory, disk, and cpu count.')
group_overlap_parser = subparsers.add_parser("group-overlap", help='Fetch nodes that belong in both the groups')
group_resources_parser.add_argument(
'--limit', help='Number of groups in descending order of their resources.', type=int, required=True)
group_overlap_parser.add_argument(
'--groups', help='specify the group names separated by a comma.', type=str, required=True
)
args = parser.parse_args()
print(args)
示例:
python3 cli.py group-resources
usage: cli.py group-resources [-h] --limit LIMIT
cli.py group-resources: error: the following arguments are required: --limit
python3 cli.py group-overlap
usage: cli.py group-overlap [-h] --groups GROUPS
cli.py group-overlap: error: the following arguments are required: --groups
python3 cli.py group-resources --limit 5 group-overlap
usage: cli.py [-h] {group-resources,group-overlap} ...
cli.py: error: unrecognized arguments: group-overlap
我想开发一个 CLI,将两对参数中的一个参数放在一起:
group-resources --limit 5
或
group-overlap --groups group1,group2
组资源是位置性的,需要限制。其余两者的规则相同。 但是,我当前的代码强制要求全部四个。
我当前的代码:
import argparse
import analysis
import cleanup
import etl
import initialize_db
parser = argparse.ArgumentParser(
description='Inventory DB for Cloud Infrastructure')
parser.add_argument(
'group-resources', help='List top k groups as per their memory, disk, and cpu count.')
parser.add_argument(
'--limit', help='Number of groups in descending order of their resources.', type=int, required=True)
parser.add_argument(
'group-overlap', help='Fetch nodes that belong in both the groups')
parser.add_argument(
'--groups', help='specify the group names separated by a comma.', type=str, required=True
)
args = parser.parse_args()
print(args)
当我 运行 python3 cli.py group-resources --limit 5
时,出现以下错误:
usage: cli.py [-h] --limit LIMIT --groups GROUPS group-resources group-overlap
cli.py: error: the following arguments are required: group-overlap, --groups
我希望如果我提供组资源和限制,或者如果我提供组重叠和组,那么我的代码应该可以工作。不允许有其他排列。我该怎么做?
我们可以使用subparsers。以下是我们如何对您的代码进行轻微修改。
import argparse
parser = argparse.ArgumentParser(
description='Inventory DB for Cloud Infrastructure')
subparsers = parser.add_subparsers(help='types of arguments')
group_resources_parser = subparsers.add_parser("group-resources", help='List top k groups as per their memory, disk, and cpu count.')
group_overlap_parser = subparsers.add_parser("group-overlap", help='Fetch nodes that belong in both the groups')
group_resources_parser.add_argument(
'--limit', help='Number of groups in descending order of their resources.', type=int, required=True)
group_overlap_parser.add_argument(
'--groups', help='specify the group names separated by a comma.', type=str, required=True
)
args = parser.parse_args()
print(args)
示例:
python3 cli.py group-resources
usage: cli.py group-resources [-h] --limit LIMIT cli.py group-resources: error: the following arguments are required: --limit
python3 cli.py group-overlap
usage: cli.py group-overlap [-h] --groups GROUPS cli.py group-overlap: error: the following arguments are required: --groups
python3 cli.py group-resources --limit 5 group-overlap
usage: cli.py [-h] {group-resources,group-overlap} ... cli.py: error: unrecognized arguments: group-overlap