Python 中对基于行的命令解释器的支持


cmd 模块只包含一个名为 Cmd 的类。它用作基于行的命令行解释器用户定义框架的基类。

Cmd

此类或其子类的对象提供基于行的解释器框架。下面列出了此类中子类继承的重要方法。

cmdloop()

此方法将对象放入循环中,接受输入并将输入发送到类中相应的命令处理程序方法。

循环启动时,将显示一条介绍性消息(作为参数提供给 cmdloop() 方法),并显示默认 (cmd) 提示符,可以通过 prompt 属性进行自定义。

解释器对象将用户输入识别为两部分。以“do_”为前缀的第一部分被视为类中的方法,第二部分被视为该方法的参数。例如,如果用户输入“hello Python”,解释器将尝试执行类中的 do_hello() 方法,并将“Python”作为参数发送。如果定义了该方法,则将执行该方法,否则将显示错误消息。

Cmd 的子类继承了 do_help() 方法。用户的输入(例如“help hello”)将获取 hello() 方法中的文档字符串并将其显示为帮助文本,或者如果存在,则将运行 help_hello() 方法。

以下示例演示了基于行的解释器框架的应用。代码首先导入 cmd 模块并定义 Cmd 类的子类。

MathOps 类定义了 add、sub、mul 和 div 方法(全部以 do_ 字符为前缀),并带有文档字符串文本。

声明 MathOps 类的对象,并通过调用 cmdloop() 方法将其发送到循环中。当用户在提示符前键入 help 时,将显示所有方法名称。当键入带有 help 的方法名称时,将显示相应方法的文档字符串。要调用任何方法,请键入其名称、所需参数并按 Enter 键。方法的结果将显示出来,提示符将重复出现,直到发出 ^D 停止循环。

from cmd import Cmd
class MathOps(Cmd):
def do_add(self, args):
'''add two numbers'''
num=args.split()
print ('addition:',int(num[0])+int(num[1]))
def do_sub(self, args):
'''subtract two numbers'''
num=args.split()
print ('subtraction:',int(num[0])-int(num[1]))
def do_mul(self, args):
'''multiply two numbers'''
num=args.split()
print ('multiplication:',int(num[0])*int(num[1]))
def do_div(self, args):
'''perform division'''
num=args.split()
print ('division:',int(num[0])/int(num[1]))
def do_EOF(self, args):
return True
op=MathOps()
op.prompt= "->"
op.cmdloop("loop starts. Press ^D to exit")

下面显示了上述脚本的示例运行结果

loop starts. Press ^D to exit
->help
Documented commands (type help ):
========================================
add div help mul sub

Undocumented commands:
======================
EOF
->help add
add two numbers
->add 5 7
addition: 12
->div 10 5
division: 2.0
->
>>>

更新于:2020年6月26日

浏览量:385

启动您的职业生涯

完成课程后获得认证

开始
广告
© . All rights reserved.