在Python中支持面向行的命令解释器

cmd模块仅包含一个称为Cmd的类。这用作面向行的命令行解释器的用户定义框架的基类。

Cmd

该类或其子类的对象提供面向行的解释器框架。子类继承的此类的重要方法如下所示。

cmdloop()

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

在循环开始时,将显示一个介绍性消息(作为cmdloop()方法的参数),并带有默认(cmd)提示,该提示可以根据提示属性进行自定义。

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

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

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

MathOps类使用文档字符串文本定义add,sub,mul和div方法(均以do_字符为前缀)。

通过调用cmdloop()method声明MathOps类的对象并将其发送到循环中。当用户在提示符前面键入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
->
>>>