欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python CLI开发工具(Click和argparse的一些记录)

程序员文章站 2022-06-13 17:01:33
...

click

组嵌套和分割

参考: [How can I split my Click commands, each with a set of sub-commands, into multiple files?](https://*.com/questions/34643620/how-can-i-split-my-click-commands-each-with-a-set-of-sub-commands-into-multipl)

project/
├── __init__.py
├── init.py
└── commands
    ├── __init__.py
    └── cloudflare.py

最外层

import click
from .commands.cloudflare import cloudflare


@click.group()
def cli():
    pass


cli.add_command(cloudflare)

其中一个组

import click


@click.group()
def cloudflare():
    pass


@cloudflare.command()
def zone():
    click.echo('This is the zone subcommand of the cloudflare command')

argparse

问题

  1. nargs=argparse.REMAINDER

    • “All the remaining command-line arguments are gathered into a list”

    • 不能用来收集子parser中的剩余arguments:

      • 用在父parser add_subparsers前(想将父parser的选项直接传递给其他程序处理),子parser的解析会出问题;用在父parser添加所有子parser后,并不能收集处于父parser和子parser之间的options

      • 详见:https://*.com/a/43219281

        而且所有以---开头的arguments都会先被识别为options,而argparse.REMAINDER在这之后起作用,也就是说,argparse.REMAINDER无法收集它应当收集的-x--xxx,除非在-x--xxx之前添加--(表示options结束),此时其收集的list为['--', '-x','--xxx']

    • 可以parse_known_args()

      • 虽然,” Prefix matching rules apply to parse_known_args(). The parser may consume an option even if it’s just a prefix of one of its known options, instead of leaving it in the remaining arguments list.“
      • 但是不会将子parser后选项同父parser的匹配
  2. namespace中父parser的arguments会和子parser的混合在一起

    • 想在父parser add_subparsers前调用parse_known_args()对父parse的arguments解析一下,但这样会影响子命令的解析
相关标签: CLI