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()

  

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()

 

其他示例

当输入空行的时候,可以重载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

python之cmd模块的更多相关文章

  1. Python的Cmd模块的简易运用学习

    昨天大佬阿炳给发了一份代码给我,看着感觉很好玩,这是自己写了个命令行吗,完了我就找篇更详细一点的博客学习了一下  cmd的主要方法和属性 方法: (1)cmdloop():类似与Tkinter的mai ...

  2. python笔记之Cmd模块

    python笔记之Cmd模块 Cmd类型提供了一个创建命令行解析器的框架,默认情况下,它使用readline来进行交互式操作.命令行编辑和命令完成. 使用cmd创建的命令行解释器循环读取输入的所有行并 ...

  3. 简单认识python cmd模块

    0X00 前言 在早前用别人的工具时,发现有些大佬会用到交互式shell,那时候就挺好奇的,但是一直都没有看一下怎么做到的. 今天在翻p牛的博客的时候,看到他早之前写的一个工具就有用到交互式shell ...

  4. 【Python】使用cmd模块构造一个带有后台线程的交互命令行界面

    最近写一些测试工具,实在懒得搞GUI,然后意识到python有一个自带模块叫cmd,用了用发现简直是救星. 1. 基本用法 cmd模块很容易学到,基本的用法比较简单,继承模块下的Cmd类,添加需要的功 ...

  5. python cmd模块练习

    # encoding=utf-8 import cmd import sys # cmd模块练习 class Client(cmd.Cmd): ''' 1)cmdloop():类似与Tkinter的m ...

  6. 【循序渐进学Python】10.模块和包

    1.导入模块 任何Python程序都可以作为模块导入,只要Python解释器能找到我们定义的模块所在位置即可,一般来讲,在一个模块被导入时,Python解释器会按照下面的步骤进行搜索: 在当前所在目录 ...

  7. python基础之模块之os模块

    os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小…… 另 ...

  8. 第四章:4.0 python常用的模块

    1.模块.包和相关语法 使用模块好处: 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Pyt ...

  9. 安装python的pip模块

    安装python的pip模块 网址https://pypi.python.org/pypi/pip 选择,点击下载 将文件解压到C:\Users\Administrator\AppData\Local ...

随机推荐

  1. 二分图最大匹配(匈牙利算法)简介& Example hdu 1150 Machine Schedule

    二分图匹配(匈牙利算法) 1.一个二分图中的最大匹配数等于这个图中的最小点覆盖数 König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数.如果你还不知 ...

  2. 去掉windows換行符^M

    在命令模式下运行命令 :%s/^M//g 回车注意:里面的^M 必须是同时按 Ctrl+V+M ,表示回车.不是直接输入 ^M,也不是粘帖复制.命令完成后,用:x 保存退出后,再次用vi打开就全部被替 ...

  3. python-语言播报

       利用系统自带模块: 在cmd中  python -m pip install pypiwin32   安装win32com模块 import win32com.client sp=win32co ...

  4. table表格 td设置固定宽度

    table宽度自适应,而且部分TD是固定宽度. 只需要将固定宽设死,留下一列不设置宽度,将table宽度设置为100%. table-layout:fixed 作用不是很清楚 <table wi ...

  5. 【leetcode】1131. Maximum of Absolute Value Expression

    题目如下: Given two arrays of integers with equal lengths, return the maximum value of: |arr1[i] - arr1[ ...

  6. es6 语法使用

    一.相关背景介绍 我们现在大多数人用的语法javascript 其实版本是ecmscript5,也是就es5.这个版本己经很多年了,且完美被各大浏览器所支持.所以很多学js的朋友可以一直分不清楚es5 ...

  7. JS中的流程控制语句

    什么叫做语句? 语句:可以理解为语言中一句一句完整的话,程序是由一条条语句构成的,语句是按照自上往下的顺序执行的. 在JavaScript可以使用{  }来为语句进行分组.同一{  }中的语句称为一组 ...

  8. DI,依赖注入,给对象赋值 ,get,set

    DI,依赖注入,给对象赋值 ,get,set给对象赋值 2种方式:1.get.set默认无参构造方法给对象赋值 2.xml中有参构造器方法给对象赋值

  9. CSP-S2 Review: 模拟

    Luogu 1087 FBI tree #include <cstdio> #include <cstring> char s[4100]; int n; char fbi(i ...

  10. SQL 基本查询语句

    --使用数据库 use date go --创建表班级表 create table classInfo ( classNo ,),--主键约束使用primary key identity classN ...