python中cmd全称_python之cmd模块

md模块可以用来做交互式shell

cmd模块是python中包含的一个公共模块,用于交互式shell和其他命令解释器等的基类,我们可以基于cmd模块自定义我们的子类,实现我们自己的交互式shell

它的执行流程也很简单,使用命令行解释器循环读取输入的所有行并解析他们,然后把输入行交给命令处理器来处理。

命令行解释器接收并解析输入行,这里先需要知道输入行包含两个部分,命令和参数,通过继承和子类方法重载父类方法的特征,命令行处理器找到合适处理该命令的子类方法

比如我们输入的是hello baby,那么我们就重写do_hello的函数,若处理方法返回TRUE,则直接退出循环

简单代码示例

#!/usr/bin/env python2.6

# coding: utf-8

import sys

import os

from cmd import Cmd

class Cli(Cmd):

def __init__(self):

Cmd.__init__(self)

def do_hello(self, line):

print "hello: ",line

if __name__ == '__main__':

cli = Cli()

cli.cmdloop()

711524-20180831111450956-635604391.png

cmd的主要方法和属性

方法:

cmdloop():类似与Tkinter的mainloop,运行Cmd解析器

onecmd(str):读取输入,并进行处理,通常不需要重载该函数,而是使用更加具体的do_command来执行特定的命令

emptyline():当输入空行时调用该方法

default(line):当无法识别输入的command时调用该方法

completedefault(text,line,begidx,endidx):如果不存在针对的complete_*()方法,那么会调用该函数,该函数主要用于Tab补充,且只能在Linux中使用

precmd(line):命令line解析之前调用

postcmd(line):命令line解析之后调用

preloop():cmdloop()运行之前调用

postloop():cmdloop()运行之后调用

help_command():对command命令的说明,其中command为可变字符

属性:

promot:交互式提示字符,也就是刚才栗子中的Cmd可以通过该参数更改

intro:在进入交互式shell前输出的字符串,可以认定为标志语之类的,其实这个可以在preloop方法输出也是一样的

完整代码栗子

#!/usr/bin/env python2.6

# coding: utf-8

import sys,os

from cmd import Cmd

class Client(Cmd):

prompt = 'pyFun>'

intro = 'Welcome to pyFun!'

def __init(self):

reload(sys)

sys.setdefaultencoding('utf-8')

Cmd.__init__(self)

def do_hello(self, line):

print "hello: ",line

def do_exit(self, arg):

print 'Bye!'

return True # 返回True 直接输出exit命令将退出

def preloop(self):

print 'print this line before entering the loop'

def postloop(self):

print 'print this line after leaving the loop'

def precmd(self, line):

print 'print this line before do a command'

return Cmd.precmd(self, line)

def postcmd(self, stop, line):

print 'print this line after do a command'

return Cmd.postcmd(self, stop, line)

def emptyline(self):

print 'print input command'

def default(line):

print 'what a input ?'

if __name__ == '__main__':

try :

os.system('ls')

client = Client()

client.cmdloop()

except:

exit()

711524-20180831170123480-10293376.png

其他示例

当输入空行的时候,可以重载emptyline()来处理

def emptyline(self):

print 'print input command'

711524-20180831170539426-1675891913.png

自定义我们自己的交互式提示字符串

prompt = 'pyFun>'

711524-20180831170756945-664667669.png

自定义欢迎语

intro = 'Welcome to pyFun!'

711524-20180831170930435-910235517.png

使程序能正常接收ctrl+c的退出方式

try:

os.system('cls')

client = Client()

client.cmdloop()

except:

exit()

当输入无法识别的命令时,使用default(line)来处理

def default(self, line):

print 'what a input ?'

711524-20180831171410367-1113215103.png

参考:https://www.cnblogs.com/r00tuser/p/7515136.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值