我需要实现程序接受子命令的命令行界面。
例如,如果程序名为“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()