在线文档教程

cmd

cmd - 支持面向行的命令解释器

源代码: Lib / cmd.py

Cmd类为编写面向行的命令解释一个简单的框架。这些对于测试线束,管理工具和原型来说通常很有用,这些工​​具和原型稍后将被包装在更复杂的界面中。

class cmd.Cmd([completekey[, stdin[, stdout]]])

一个Cmd实例或子类实例是一个面向行的解释器框架。没有充分的理由来实例化Cmd自己; 相反,它作为您自己定义的解释器类的超类很有用,以继承Cmd方法和封装操作方法。

可选参数completekeyreadline完成键的名称; 它默认为Tab。如果completekeyNonereadline是可用的,命令完成自动完成。

可选参数stdinstdout指定了Cmd实例或子类实例将用于输入和输出的输入和输出文件对象。如果没有指定,他们将默认为sys.stdinsys.stdout

如果你想要使用一个给定的stdin,确保将实例的use_rawinput属性设置为False,否则stdin将被忽略。

在版本2.3中更改:添加了标准输入标准输出参数。

1. Cmd对象

一个Cmd实例有以下方法:

Cmd.cmdloop([intro])

反复发出提示,接受输入,从收到的输入中解析出一个初始前缀,并分派给操作方法,将其余的行作为参数传递给它们。

可选参数是在第一个提示之前发布的横幅或介绍字符串(这将覆盖intro类属性)。

如果readline模块被加载,输入将自动继承类似bash的历史列表编辑(例如,Control-P滚动回到最后一个命令,Control-N转到下一个命令,以Control-F非破坏性的方式向右Control-B移动光标,破坏性地等)。

输入的文件结束被作为字符串传回'EOF'

一个解释器实例会识别一个命令名称,foo当且仅当它有一个方法do_foo()。作为一种特殊情况,以字符开头的行将'?'被分派给该方法do_help()。作为另一种特殊情况,以字符开头的行将'!'被分派给方法do_shell()(如果定义了这种方法)。

postcmd()方法返回一个真值时,这个方法会返回。该参数postcmd()是命令的相应的返回值do_*()的方法。

如果启用了完成,完成命令将自动完成,并通过调用complete_foo()参数textlinebegidxendidx来完成命令args 。text是我们试图匹配的字符串前缀:所有返回的匹配都必须以它开头。是删除前导空白的当前输入begidxendidx是前缀文本的开始和结束索引,可用于根据参数位于哪个位置来提供不同的完成。

所有Cmd继承预定义的子类do_help()。此方法使用参数'bar'调用,调用相应的方法help_bar(),如果不存在,则打印文档字符串(do_bar()如果可用)。如果没有参数,则do_help()列出所有可用的帮助主题(即所有具有相应help_*()方法或具有文档字符串的命令的命令),并列出所有未记录的命令。

Cmd.onecmd(str)

解释参数,就好像它是根据提示输入的一样。这可能会被忽略,但通常不需要; 请参阅precmd()postcmd()有用的执行钩子的方法。返回值是一个标志,指示解释器是否应停止解释命令。如果strdo_*()命令有一个方法,则返回该方法的返回值,否则返回该方法的返回值。default()

Cmd.emptyline()

在响应提示输入空行时调用的方法。如果此方法未被覆盖,则重复输入的最后一个非空命令。

Cmd.default(line)

在命令前缀未被识别时在输入行上调用的方法。如果这个方法没有被覆盖,它会输出一个错误信息并返回。

Cmd.completedefault(text, line, begidx, endidx)

当没有特定于命令的complete_*()方法可用时,调用方法来完成输入行。默认情况下,它返回一个空列表。

Cmd.precmd(line)

钩方法执的命令之前解释,但会产生和发出的输入提示之后。这个方法是一个存根Cmd; 它存在被子类覆盖。返回值用作将由方法执的命令onecmd( 该precmd()实现可以重新写入命令或简单地返回线不

Cmd.postcmd(stop, line)

Hook方法在命令调度完成后执行。这个方法是一个存根Cmd; 它存在被子类覆盖。line是执行的命令行,stop是一个标志,表示在调用之后执行是否会终止postcmd( 这将是方法的返回值onecmd()。该方法的返回值将被用作与停止对应的内部标志的新值; 返回错误将导致解释继续。

Cmd.preloop()

钩子方法cmdloop()被调用时执行一次。这个方法是一个存根Cmd; 它存在被子类覆盖。

Cmd.postloop()

Hook方法在cmdloop()即将返回时执行一次。这个方法是一个存根Cmd; 它存在被子类覆盖。

Cmd子类的实例具有一些公共实例变量:

Cmd.prompt

发出提示以请求输入。

Cmd.identchars

接受命令前缀的字符串。

Cmd.lastcmd

最后看到非空命令前缀。

Cmd.cmdqueue

排队的输入行列表。cmdloop()当需要新输入时,会检查cmdqueue列表; 如果它不是空的,它的元素将按顺序处理,就像在提示符处输入一样。

Cmd.intro

作为介绍或横幅发布的字符串。可以通过给cmdloop()方法一个参数来覆盖。

Cmd.doc_header

如果帮助输出包含用于记录的命令的部分,则发出头文件。

Cmd.misc_header

如果帮助输出具有用于其他帮助主题的部分(即,help_*()没有相应do_*()方法的方法),则发出头文件。

Cmd.undoc_header

如果帮助输出具有未记录命令的部分(即,do_*()没有相应help_*()方法的方法),则发出头文件。

Cmd.ruler

用于在帮助消息标题下绘制分隔线的字符。如果为空,则不绘制标尺线。它默认为'='

Cmd.use_rawinput

一面旗帜,默认为真。如果为true,则cmdloop()用于raw_input()显示提示并阅读下一个命令; 如果错误,sys.stdout.write()并被sys.stdin.readline()使用。(这意味着通过readline在支持它的系统上导入,解释器将自动支持类Emacs的行编辑和命令历史击键。)