小编Ene*_*nea的帖子

如何使用argparse处理CLI子命令

我需要实现一个命令行界面,程序接受子命令.

例如,如果程序名为"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)

python argparse subcommand subparsers

5
推荐指数
1
解决办法
3496
查看次数

标签 统计

argparse ×1

python ×1

subcommand ×1

subparsers ×1