On this page
23.1. cmd-支持面向行的命令解释器
源代码: Lib/cmd.py
Cmd类为编写面向行的命令解释器提供了一个简单的框架。这些通常对于测试工具,Management 工具和原型很有用,这些工具随后将被包装在一个更复杂的界面中。
-
- class *
cmd.
Cmd
([* completekey * [,* stdin * [,* stdout *]]])
- class *
可选参数* completekey 是完成密钥的readline名称;它默认为 Tab。如果 completekey *不是None且readline可用,则命令自动完成。
可选参数* stdin 和 stdout *指定 Cmd 实例或子类实例将用于 Importing 和输出的 Importing 和输出文件对象。如果未指定,则默认为sys.stdin和sys.stdout。
如果要使用给定的* stdin ,请确保将实例的use_rawinput属性设置为False
,否则 stdin *将被忽略。
在版本 2.3 中进行了更改:添加了* stdin 和 stdout *参数。
23.1.1. Cmd 对象
Cmd实例具有以下方法:
Cmd.
cmdloop
([* intro *])- 反复发出提示,接受 Importing,从接收到的 Importing 中解析出一个初始前缀,然后分派给操作方法,并将行的其余部分作为参数传递给它们。
可选参数是在第一个提示之前发出的标题或简介字符串(此值将覆盖intro class 属性)。
如果加载了readline模块,则 Importing 将自动继承 bash 之类的历史列表编辑(例如,Control-P 滚动回到上一个命令,Control-N 向前滚动到下一个命令,Control-F 将光标移动到非破坏性地向右移动,Control-B 则以无破坏性地将光标移动到左侧,依此类推)。
Importing 的文件末尾作为字符串'EOF'
传回。
解释器实例只有在具有方法do_foo()
的情况下,才能识别命令名称foo
。在特殊情况下,以字符'?'
开头的行被分派给方法do_help()
。作为另一种特殊情况,以字符'!'
开头的行被分派给方法do_shell()
(如果定义了这样的方法)。
当postcmd()方法返回 true 值时,此方法将返回。 postcmd()的* stop *参数是命令的相应do_*()
方法的返回值。
如果启用了完成,则将自动完成命令的完成,并且pass使用参数* text , line , begidx 和 endidx *调用complete_foo()
来完成命令 args 的完成。 * text *是我们try匹配的字符串前缀:所有返回的匹配项都必须以它开头。 * line 是当前 Importing 行,其中前导空格已删除, begidx 和 endidx *是前缀文本的开始和结束索引,可根据参数所处的位置来提供不同的补全。
Cmd的所有子类都继承了 sched 义的do_help()
。用参数'bar'
调用的此方法将调用相应的方法help_bar()
,如果不存在,则打印do_bar()
的文档字符串(如果有)。 do_help()
不带任何参数,列出所有可用的帮助主题(即,具有相应help_*()
方法的所有命令或具有文档字符串的命令),并列出所有未记录的命令。
Cmd.
onecmd
(* str *)Cmd.
emptyline
( )- 响应提示 Importing 空行时调用的方法。如果不重写此方法,它将重复 Importing 的最后一个非空命令。
Cmd.
default
(* line *)- 无法识别命令前缀时在 Importing 行上调用的方法。如果未重写此方法,则它会显示一条错误消息并返回。
Cmd.
completedefault
(* text , line , begidx , endidx *)- 在没有特定于命令的
complete_*()
方法可用时调用此方法来完成 Importing 行。默认情况下,它返回一个空列表。
- 在没有特定于命令的
Cmd.
precmd
(* line *)Cmd.
postcmd
(* stop , line *)Cmd.
preloop
( )Cmd.
postloop
( )
Cmd个子类的实例具有一些公共实例变量:
Cmd.
prompt
- 发出提示以征求 Importing。
Cmd.
identchars
- 命令前缀接受的字符字符串。
Cmd.
lastcmd
- 看到的最后一个非空命令前缀。
Cmd.
cmdqueue
- 排队的 Importing 行列表。需要新 Importing 时,会在cmdloop()中检查 cmdqueue 列表;如果它是非空的,则将按 Sequences 处理其元素,就像在提示符下 Importing 一样。
Cmd.
intro
- 要作为简介或横幅发布的字符串。可以pass为cmdloop()方法提供参数来覆盖它。
Cmd.
doc_header
- 如果帮助输出中有记录文档的部分,则发出的标题。
Cmd.
misc_header
- 如果帮助输出中包含有关其他帮助主题的部分(即,有
help_*()
个方法而没有相应的do_*()
个方法),则会发出的标题。
- 如果帮助输出中包含有关其他帮助主题的部分(即,有
Cmd.
undoc_header
- 如果帮助输出中包含未记录命令的部分,则要发出的标题(即,有
do_*()
个方法而没有相应的help_*()
个方法)。
- 如果帮助输出中包含未记录命令的部分,则要发出的标题(即,有
Cmd.
ruler
- 用于在帮助消息标题下绘制分隔线的字符。如果为空,则不绘制标尺线。默认为
'='
。
- 用于在帮助消息标题下绘制分隔线的字符。如果为空,则不绘制标尺线。默认为
Cmd.
use_rawinput
- 一个标志,默认为 true。如果为 true,则cmdloop()使用raw_input()显示提示并阅读下一条命令;如果为 false,则使用
sys.stdout.write()
和sys.stdin.readline()
。 (这意味着,pass在支持readline的系统上导入readline,解释器将自动支持 Emacs 之类的行编辑和命令历史击键。)
- 一个标志,默认为 true。如果为 true,则cmdloop()使用raw_input()显示提示并阅读下一条命令;如果为 false,则使用