python - 具有 Python Cmd 类的面向行命令解释器的多种模式

标签 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 类实现同样的事情?

最佳答案

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

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

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

关于python - 具有 Python Cmd 类的面向行命令解释器的多种模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484365/

相关文章:

c# - 无法使用 CommandLineParser 包运行程序

windows - 将所有文件重命名为小写,替换空格

windows - 在cmd(bat文件)中运行reg命令?

python - 如何使用 Python 根据设备名称获取卷标

字符串编码中的 Python-3 和\x Vs\u Vs\U 以及原因

linux - 从 WINE 中运行的程序执行 Shell 命令

linux - 如何根据上一个命令比较得到下一个输入命令[bash-script]

linux - 我的 shell 脚本如何对不同文件夹中的文件进行操作?

python - 如何使用 DataFrame 中的行值作为 Pandas 中的操作列?

python - 关于 matplotlib 对数轴标签