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

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模块的更多相关文章
- Python的Cmd模块的简易运用学习
昨天大佬阿炳给发了一份代码给我,看着感觉很好玩,这是自己写了个命令行吗,完了我就找篇更详细一点的博客学习了一下 cmd的主要方法和属性 方法: (1)cmdloop():类似与Tkinter的mai ...
- python笔记之Cmd模块
python笔记之Cmd模块 Cmd类型提供了一个创建命令行解析器的框架,默认情况下,它使用readline来进行交互式操作.命令行编辑和命令完成. 使用cmd创建的命令行解释器循环读取输入的所有行并 ...
- 简单认识python cmd模块
0X00 前言 在早前用别人的工具时,发现有些大佬会用到交互式shell,那时候就挺好奇的,但是一直都没有看一下怎么做到的. 今天在翻p牛的博客的时候,看到他早之前写的一个工具就有用到交互式shell ...
- 【Python】使用cmd模块构造一个带有后台线程的交互命令行界面
最近写一些测试工具,实在懒得搞GUI,然后意识到python有一个自带模块叫cmd,用了用发现简直是救星. 1. 基本用法 cmd模块很容易学到,基本的用法比较简单,继承模块下的Cmd类,添加需要的功 ...
- python cmd模块练习
# encoding=utf-8 import cmd import sys # cmd模块练习 class Client(cmd.Cmd): ''' 1)cmdloop():类似与Tkinter的m ...
- 【循序渐进学Python】10.模块和包
1.导入模块 任何Python程序都可以作为模块导入,只要Python解释器能找到我们定义的模块所在位置即可,一般来讲,在一个模块被导入时,Python解释器会按照下面的步骤进行搜索: 在当前所在目录 ...
- python基础之模块之os模块
os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小…… 另 ...
- 第四章:4.0 python常用的模块
1.模块.包和相关语法 使用模块好处: 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Pyt ...
- 安装python的pip模块
安装python的pip模块 网址https://pypi.python.org/pypi/pip 选择,点击下载 将文件解压到C:\Users\Administrator\AppData\Local ...
随机推荐
- element隐藏组件滚动条scrollbar使用
可使用 组件 <el-scrollbar></el-scrollbar> 设置 组件的样式 为 高度100% <el-scrollbar style="heig ...
- bzoj5017 [Snoi2017]炸弹 (线段树优化建图+)tarjan 缩点+拓扑排序
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5017 题解 这个题目方法挺多的. 线段树优化建图 线段树优化建图的做法应该挺显然的,一个炸弹能 ...
- DevExpress ASP.NET Core Controls 2019发展蓝图(No.5)
本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...
- hihocoder 1582 : Territorial Dispute (计算几何)(2017 北京网络赛E)
题目链接 题意:给出n个点.用两种颜色来给每个点染色.问能否存在一种染色方式,使不同颜色的点不能被划分到一条直线的两侧. 题解:求个凸包(其实只考虑四个点就行.但因为有板子,所以感觉这样写更休闲一些. ...
- php下载文件夹目录下的文件
最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- Spring Cloud教程(十一)环境变化和刷新范围
应用程序将收听EnvironmentChangeEvent,并以几种标准方式进行更改(用户可以以常规方式添加ApplicationListeners附加ApplicationListeners).当观 ...
- 基于Anaconda安装Tensorflow 并实现在Spyder中的应用
基于Anaconda安装Tensorflow 并实现在Spyder中的应用 Anaconda可隔离管理多个环境,互不影响.这里,在anaconda中安装最新的python3.6.5 版本. 一.安装 ...
- win7不正常开关机,系统恢复选项
会win7不正常开关机后,会默认进入“系统回复选项”. 无人值守的机器远程会无法连接,默认会进入此界面. 解决方法: 到现场,鼠标.键盘.显示器, 开机后选择正常启动, 在命令行模式输入以下命令bcd ...
- Android.mk【转】
本文转载自:http://android.mk/#simple Secrets of Android.mk Introduction to Android.mk: This document desc ...
- UART协议详解
UART(Universal Asynchronous Receiver/Transmitter)是一种异步全双工串行通信协议,由Tx和Rx两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定 ...