Cmd模块,一个可以写出仿控制端功能的一个模块,简单介绍模块下的几个方法。
Cmd.onecmd(str)
解释参数尽管它已经以响应提示输入参数,这个方法将会被重写,但是通常不需要,请看对于更有用执行命令的percmd()和postcmd()方法。这个方法将会返回一个标志表明命令解释是否应该被停止,如果有一个do_*的方法去执行一个命令str,那么这个返回值就是这个do_str函数返回的值,否则这个返回值就是默认函数返回的值
Cmd.emptyline()
当有一个空行输入时这个方法会会被调用,如果你没有重写这个方法的话,那么这个它会重复进入最后一个非空的命令(执行最后一个非空的命令)
Cmd.default(line)
当输入一行前缀不能被确认的命令行时该方法会被调用,如果该方法没有被重写,那么它会打印出一个错误的信息并返回。
Cmd_precmd(line)
该方法在命令行被解析值钱,但在输入提示生成并且发出提示后被调用,它存在并且被子类重写,它的返回值被用作被oncmd()方法执行的命令。
Cmd.postcmd(stop,line)
该方法会在命令调度结束之后被调用,它可以被子类重写,参数line表示将会被执行的命令,参数stop是一个标志表示在调用postcmd()方法之后执行是否会被停止,它返回了一个onecmd()方法的值。这个函数的返回值将会被作为一个新值给对应停止的内部标志使用;返回false会造成解析继续。
使用一个别人的例子:
import cmd
import sys
import time
import os
class MyTest(cmd.Cmd):
prompt="$"
def __init__(self):
cmd.Cmd.__init__(self)
pass
def do_test(self, arg):
print "%s: "%type(arg), arg
pass
def precmd(self, line):
"""do sth: connect to db or ..."""
return line
def postcmd(self, stop, line):
print "[Input is '%s', state is %s]"%(line,stop)
sys.stdout.flush()
return stop
def do_shell(self,arg):
os.system(arg)
pass
def do_exit(self, arg):
#sys.exit(0)
return "bye"
a = MyTest()
a.cmdloop()
do_*,这个*是你自定义的一个命令,当你要执行命令是需要* 后面加你要执行的命令。
当你输入shell时,后面可以加你默认系统的执行命令,
输入exit时你可以退出程序。