我需要实现一个命令行界面,程序接受子命令.
例如,如果程序名为"foo",则CLI看起来像
foo cmd1 <cmd1-options>
foo cmd2
foo cmd3 <cmd3-options>
Run Code Online (Sandbox Code Playgroud)
cmd1并且cmd3必须与其中至少一个选项一起使用,并且这三个cmd*参数始终是独占的.
我试图在argparse中使用subparser,但暂时没有成功.问题是cmd2,没有参数:
如果我尝试添加不带参数的subparser条目,则返回的命名空间parse_args将不包含任何告知我已选择此选项的信息(请参阅下面的示例).如果我尝试cmd2作为参数添加parser(而不是subparser),那么argparse会期望cmd2参数将跟随任何subparsers参数.
有没有一种简单的方法来实现这一目标argparse?用例应该很常见......
以下是我到目前为止所尝试的更接近我需要的内容:
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()
Run Code Online (Sandbox Code Playgroud)