博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之cmd模块
阅读量:4614 次
发布时间:2019-06-09

本文共 2609 字,大约阅读时间需要 8 分钟。

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

 

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

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

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

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

简单代码示例

#!/usr/bin/env python2.6# coding: utf-8import sysimport osfrom cmd import Cmdclass Cli(Cmd):        def __init__(self):                Cmd.__init__(self)        def do_hello(self, line):                print "hello: ",lineif __name__ == '__main__':        cli = Cli()        cli.cmdloop()

  

 

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-8import sys,osfrom 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()

 

 

 

其他示例

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

def emptyline(self):    print 'print input command'

 

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

prompt = 'pyFun>'

 

 自定义欢迎语

intro = 'Welcome to pyFun!'

 

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

try:    os.system('cls')    client = Client()    client.cmdloop()except:    exit()

  

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

def default(self, line):        print 'what a input ?'

 

 

 

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

 

转载于:https://www.cnblogs.com/yyf573462811/p/9566919.html

你可能感兴趣的文章
python的沙盒环境--virtualenv
查看>>
软件自动化测试——入门、进阶与实战
查看>>
BZOJ1878 [SDOI2009]HH的项链 树状数组 或 莫队
查看>>
BZOJ3675 [Apio2014]序列分割 动态规划 斜率优化
查看>>
2016.10.24 继续学习
查看>>
产品功能对标 - 服务授权管理
查看>>
各地IT薪资待遇讨论
查看>>
splay入门
查看>>
带CookieContainer进行post
查看>>
C语言学习笔记--字符串
查看>>
CSS-上下文选择器
查看>>
ionic repeat 重复最后一个时要执行某个函数
查看>>
1.初识代码审计-基础
查看>>
[Vue-rx] Stream an API using RxJS into a Vue.js Template
查看>>
解决VC几个编译问题的方法——好用
查看>>
SPOJ #11 Factorial
查看>>
City Upgrades
查看>>
“人少也能办大事”---K2 BPM老客户交流会
查看>>
关于七牛进行图片添加文字水印操作小计
查看>>
DataSource数据库的使用
查看>>