14.5 cmd:面向行的命令处理器
cmd模块包含一个公共类Cmd,这个类被用作交互式shell和其他命令解释器的基类。默认地它使用readline完成交互式提示处理、命令行编辑和命令完成。

14.5.1 处理命令
用cmd的命令解释器使用一个循环从输入读取所有行,进行解析,然后将命令分派到一个适当的命令处理器(command handler)。输入行会被解析为两部分:命令以及该行上的所有其他文本。例如,如果用户输入foo bar,而且解释器类包含一个名为do_foo()的方法,那么便会调用这个方法并以"bar"作为它的唯一参数。文件末尾(end-of-file)标志被分派至do_EOF()。如果一个命令处理器返回true值,那么程序会妥善地退出。所以如果要提供一个简洁的方法退出解释器,就一定要实现do_EOF(),并让它返回True.
下面这个简单的示例程序支持"greet"命令。

import cmd


class HelloWorld(cmd.Cmd):

    def do_greet(self,line):
        print("hello")
    def do_EOF(self,line):
        return True

if __name__ == '__main__':
    HelloWorld().cmdloop()

交互式地运行这个程序展示了如何分派命令,并显示Cmd中包含的一些特性。

首先要注意的是命令提示符(Cmd)。这个提示符可以通过属性prompt来配置。提示符值是动态的;也就是说,如果一个命令处理器改变了提示符属性,就会使用新值来询问下一个命令。

help命令被内置在Cmd中。如果没有提供参数,则help会显示可用命令的列表。如果输入包括一个命令名,则输出会更为详细,并且只显示这个命令的详细信息(如果有)。如果命令是greet,则会调用do_greet()来处理。

对应一个命令,如果类中没有包含特定的命令处理器,则会调用方法default(),并以整个输入行作为参数。default()的内置实现会报告一个错误。

由于do_EOF()返回True,键入Ctrl-D会使解释器退出。

退出时不会打印换行,所以结果看上去有些乱。

android cmdline 最大_android cmdline 最大