在前些时候小白已经使用getopt获得命令行工具。
但是,要完成一个个看似简单,实际有 N 多情况的逻辑判定就有点烦人了。
热心的行者,又出声了:“使用 cmd 吧!”
cmd模块,是一个专门支持命令行界面的模块。让我们来重构一下它:
# -*- coding: utf-8 -*-
import sys
import cmd
class PyCDC(cmd.Cmd):
def __init__(self):
# 初始化基类,类的定量应该都在初始化时声明
cmd.Cmd.__init__(self)
# 定义命令行提示符
self.prompt = ">"
# 定义walk命令所执行的操作
def do_walk(self, filename):
if filename == "":
filename = input("请输入cdc文件名:")
print("扫描光盘内容保存到:'%s'" % filename)
# 定义walk命令的帮助输出
def help_walk(self):
print("扫描光盘内容 walk cd and export init '.cdc'")
# 定义dir命令所执行的操作
def do_dir(self, pathname):
if pathname == "":
pathname = input("请输入指定保存/搜索目录:")
# 定义dir(命令的帮助输出
def help_dir(self):
print("指定保存/搜索目录")
# 定义find命令所执行的操作
def do_find(self, keyword):
if keyword == "":
keyword = input("请输入搜索关键词:")
# 定义find命令的帮助输出
def help_find(self):
print("搜索关键词")
# 定义quit命令所执行的操作
def do_quit(self, arg):
sys.exit(1)
# 定义quit命令的帮助输出
def help_quit(self):
print("Syntax:quit")
print("--terminates the application")
# 定义quit的快捷方式
do_q = do_quit
if __name__ == '__main__':
cdc = PyCDC()
cdc.cmdloop()运行效果如下:
>help Documented commands (type help <topic>): ======================================== dir find help quit walk Undocumented commands: ====================== q >dir 请输入指定保存/搜索目录:cdc >walk 请输入cdc文件名:test.cdc 扫描光盘内容保存到:'test.cdc' >?find 搜索关键词 >xx *** Unknown syntax: xx >q >>> ========================== >find 请输入搜索关键词:images >quit
可以看到,此代码纯粹是用来尝试cmd模块功能的,只能打印输出信息,没有任何实际作用。
从这个例子可以看出,首先PyCDC类继承cmd.Cmd类,然后在类中定义了walk,dir,find和quit,而命令q被作为quit的短命令形式。(也就是说,若须另外定义一条命令,如command,只要在PyCDC类中增加一个 do_command 函式)而该命令对应的帮助信息由help_command 函式给出。
就像示例中所写的那样,自定义的PyCDC类提供了的命令,是可以正常使用它们的,而xx命令是没有定义的,所以命令行提示为未知语法。最后的q命令和quit是一样的功能,即退出程序。
# -*- coding: utf-8 -*- import os import sys from cdctools import * # 可以引入己有脚本cdctools中的所有函数 def cdWalker(cdrom, cdcfile): export = "" for root, dirs, files in os.walk(cdrom): export += "\n %s;%s;%s" % (root, dirs, files) open(cdcfile, 'w').write(export) if __name__ == "__main__": cdc = PyCDC() cdc.cmdloop()
哈哈,可以运行起来!可以看的出在代码中,按代码的复用尺度来分,从小到大应该是:代码行→函式→类→模块
好像还有更大的一级包,具体现在还用不上,那就先不管它了。
原文:http://blog.51cto.com/9473774/2090044