我需要实现程序接受子命令的命令行界面。
例如,如果程序名为“foo”,则 CLI 看起来像
foo cmd1 <cmd1-options>
foo cmd2
foo cmd3 <cmd3-options>
cmd1
并且cmd3
必须与它们的至少一个选项一起使用,并且三个cmd*
参数始终是互斥的。
我正在尝试在 argparse 中使用子解析器,但目前没有成功。问题在于cmd2
,它没有参数:
如果我尝试添加不带参数的子解析器条目,则返回的命名空间parse_args
将不包含任何告诉我选择了此选项的信息(请参见下面的示例)。如果我尝试将cmd2
作为参数添加到parser
(而不是子解析器),那么 argparse 将期望该cmd2
参数后跟任何子解析器参数。
有没有一种简单的方法来实现这一点argparse
?用例应该很常见……</p>
以下是我迄今为止所尝试的更接近我需要的内容:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='Functions')
parser_1 = subparsers.add_parser('cmd1', help='...')
parser_1.add_argument('cmd1_option1', type=str, help='...')
parser_2 = subparsers.add_parser(cmd2, help='...')
parser_3 = subparsers.add_parser('cmd3', help='...')
parser_3.add_argument('cmd3_options', type=int, help='...')
args = parser.parse_args()