使用命令行模块和其他相关命令行的便利功能
cs.cmdutils的Python项目详细描述
版本20190729: BaseCommand:支持usage_format usage消息格式字符串和getopt_error_处理程序方法。
类BaseCommand
用于处理可嵌套命令行的基类。
这个类提供了基本的解析和分派机制 用于命令行。 实现命令行 一个实例是basecommand的一个子类:
class MyCommand(BaseCommand):
GETOPT_SPEC = 'ab:c'
USAGE_FORMAT = r"""Usage: {cmd} [-a] [-b bvalue] [-c] [--] arguments...
-a Do it all.
-b But using bvalue.
-c The 'c' option!
"""
...
the_cmd = MyCommand()
运行命令的方式是:
the_cmd.run(argv)
子类通过重写以下方法进行自定义:
apply_defaults(options)
: 准备options
的初始状态 在应用任何命令行选项之前apply_opts(options,opts)
: 将opts
应用到options
。opts
是一个选项值映射 由getopot.getopt
返回。cmd_
subcmd(argv,options)
: 如果命令行选项后面跟着一个参数 其值为subcmd, 然后方法cmd_
subcmd(argv,options)
将在包含命令行参数的argv
处调用 在subcmd之后。main(argv,options)
: 如果选项后没有命令行调整 或者第一个参数没有对应的cmd_
subcmd方法 那么方法main(argv,options)
将在包含命令行参数的argv
处调用。run_context(argv,options,cmd)
: 提供设置或拆卸操作的上下文管理器 分别在命令实现之前和之后发生。 如果实现是cmd_
subcmd方法 然后用cmd=
subcmd调用它; 如果实现是main
然后用cmd=None
调用它。
帮助递归使用
每个命令的所有状态
包含在options
对象中
因此在典型的应用中
所有的apply_opts
,cmd_
子md,main
和run_context
应该是不引用self
的静态方法。
社论:为什么不是阿帕斯?
主要是因为当错误调用时
argparse命令行打印帮助/用法消息
用SystemExit
中止整个程序。
函数docmd(dofunc)
用于cmd子类方法的decorator 提供一些基本的服务质量。
这个装饰工:
- 在上下文的
cs.pfx.Pfx
中包装函数调用 - 截取
getopt.GetoptError
s,发出warning
并使用方法名运行self.do_help
, 然后返回None
- 拦截其他
Exception
s, 发出exception
日志消息 并返回None
目的是修饰cmd.Cmd
do_
*方法:
from cmd import Cmd
class MyCmd(Cmd):
@docmd
def do_something(...):
... do something ...
发布日志
版本20190729: BaseCommand:支持usage_format usage消息格式字符串和getopt_error_处理程序方法。
版本20190619.1: 另一个棘手的docstring格式修复。
版本20190619: 小文档更新。
版本20190617.2: 皮棉。
版本20190617.1: 带有@docmd decorator和alpha-quality basecommand命令行帮助类的初始版本。