在Python中支持面向行的命令解释器
cmd模块仅包含一个称为Cmd的类。这用作面向行的命令行解释器的用户定义框架的基类。
Cmd
该类或其子类的对象提供面向行的解释器框架。子类继承的此类的重要方法如下所示。
cmdloop()
此方法循环发送对象,接受输入并将其发送到类中的相应命令处理程序方法。
在循环开始时,将显示一个介绍性消息(作为cmdloop()
方法的参数),并带有默认(cmd)提示,该提示可以根据提示属性进行自定义。
解释器对象分为两部分来识别用户输入。前缀为'do_'的第一部分在类中被视为方法,第二部分作为该方法的参数。例如,如果用户输入“helloPython”,则解释器尝试在发送“Python”作为参数的类中执行do_hello()方法。如果定义了上述方法,则将执行该方法,否则将显示错误消息。
Cmd的子类继承do_help()方法。用户输入(例如“helphello”)将获取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 -> >>>