[学习]探究python命令行(三)
在上一篇博文中,我们已经具备了编写一个简单命令行程序的能力。本文将和大家继续深入了解argparse的进阶用法,助力我们拥有实现复杂程命令行程序的能力。
互斥参数
互斥参数
就是多个参数之间彼此互斥,不能同时出现。
使用互斥参数首先通过 ArgumentParser.add_mutually_exclusive_group
在解析器中添加一个互斥组,然后在这个组里添加参数,那么组内的所有参数都是互斥的。
比如:
自定义帮助
ArgumentParser
使用 formatter_class
入参来控制所输出的帮助格式。比如,通过指定 formatter_class=argparse.RawTextHelpFormatter
,我们可以让帮助内容遵循原始格式:
参数组
有时候,我们需要给参数分组,以使得在显示帮助信息时能够显示到一起。
比如某命令行支持三个参数选项 --user
、--password
和--push
,前两者需要放在一个名为 authentication
的分组中以表示它们是身份认证信息。那么我们可以用 ArgumentParser.add_argument_group
来满足
可以看到,当我们输出帮助信息时,--user
和 --password
选项都出现在 authentication
分组中。
选项参数前缀
在argparse中,选项参数前缀默认是‘-’‘--’,但它也支持自定义前缀的,比如:
显而易见,-,+,/在本例中均支持
共享解析器
这个实际上是比较类似继承的特性,需要共享的解析器放在父类中,而子类可以实现自己特有的命令行。
比如id password 这些需要客户端和云端都需要的命令行,可以放入base中,这样可以减少重复代码。
嵌套解析器
在日常中我们经常遇到嵌套解析器,比如‘git add xxxx’ ‘git reset --hard HEAD’等等。
这就需要我们在argparse中嵌套一个解析器。我就直接拿网上的这个例子,比如:
直接指定 delete -h
来查看 delete
子命令支持的参数选项:
自定义动作
虽然argparse中定义了八个动作,但是很多时候也需要自定义动作。
要想
实现一个自定义动作类,需继承自 argparse.Action
,这个自定义动作类要传入到 ArgumentParser.add_argument
的 action
入参。当解析器解析参数时,会调用该类的 __call__
方法,该方法的签名为 __call__(self, parser, namespace, values, option_string=None)
,其中:
parser 为解析器实例
namespace 存放解析结果
values 即命令行中传入的参数值
option_string 为参数选项
这里举的是公众号上改成大写字母的例子:
以上是今日的学习记录,接下来跟着公众号,用argparse实现自己的一些git指令
再次感谢: