使用Python Cmd类的面向行的命令解释器的多种模式

时间:2013-08-28 09:39:28

标签: python shell cmd command-line-interface

我正在尝试使用Python Cmd类构建一个CLI(面向行的命令解释器),支持2种或更多模式,每种模式都有不同的命令集,并有命令在它们之间切换。

目前我为每种模式使用2个独立的类实现了2种模式,然后我将下一个类设置为在状态变量中执行:

class OpMode(Cmd):
    def do_show(self, line):
        :
    def do_configure(self, line): # switch to ConfigMode
        ctx.state = 'config'
        return True

class ConfigMode(Cmd):
    def do_set(self, line):
        : 
    def do_exit(self, line):  # go back to OpMode
        ctx.state = 'op'
        return True

# in main ...
while 1:
    if ctx.state == 'op':
        opcli.cmdloop()
    elif ctx.state == 'conf':
        confcli.cmdloop()
    else:
        break

有没有办法用单个Cmd类实现相同的功能?

1 个答案:

答案 0 :(得分:1)

使用单个cmd实例不会改善您的代码。您可以在Cmd类中跟踪您的状态,然后针对每个命令操作相应地调整您的响应。

然而,您可能想要的是不同状态之间更清晰的过渡。您可以按如下方式执行此操作:

def do_configure(self, line):
    config = ConfigMode(...)
    config.cmdloop()