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
问题
-
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的匹配
- 虽然,” Prefix matching rules apply to
-
-
namespace中父parser的arguments会和子parser的混合在一起
- 想在父parser
add_subparsers
前调用parse_known_args()
对父parse的arguments解析一下,但这样会影响子命令的解析
- 想在父parser