最近在捣鼓Python(名词解释:英文版、中文版)。语言简单了就是好,很快就能上手。按惯例新语言总要写个“hello world”祭刀,但是蟒蛇语言的“hello world”过于简单(就一句话:print ‘hello world’),所以总得整点什么有实用价值的来写着玩。
作下面这坨东西的需求是:我想让系统裸体快速启动,这样需要一个脚本把现在自动启动的所有进程都放进去——很像是bat干的事情。只可惜Windows的bat实在太弱,不仅是串行的,而且是阻塞的。只有某一行进程退出之后,才会运行下一行的进程。所以如果想同时启动两个以上进程,根本没戏。下面这段代码可以解决这个问题,一次启动一大堆,然后自己就滚蛋了。如果没心情往下看也没关系,猛击此处下载可执行程序,使用说明在readme.txt里面,拿去用就是。代码在python 2.5.2下编写通过,转换成windows下可独立运行的exe使用了py2exe这个扩展。
程序运行流程是:从命令行参数中读入一个文件名(L41~L44),打开这个文件(L22),将这个文件的每一行读出并取出“//”和”回车”之前的字符串头部(L27),然后把这段字符串作为命令行启动新进程(L15)——简而言之:替代系统的bat文件解释器,附带支持C++的行注释语法。里面有函数、类之类基本语法特性,好懂得很。实际上刚写完的时候只有十几行,全都在__main__里面。我为了玩一下函数调用和面向对象,故意把它拖得又臭又长。
| mybat.py | ||
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import subprocess # 井号开头表示注释 import sys # 这三个是加载的其他py文件,类似include。当前这个文件也能被其他py文件加载 import re # 类定义 class mySubProcess(): # 所有的块级对象(class、def、if、for等等)都用冒号开始,用向后缩进表示包含关系! counter = 0 # 所谓的“类变量”,这个类的所有对象持有同一份 def __init__(self, cmd_string = None): # 对象的构造器(constructor),self是当前对象,支持默认参数 if cmd_string != None: self.cmd_string = cmd_string # 操作对象的私有变量self.cmd_string mySubProcess.counter += 1 # 操作类变量 def run(self): subprocess.Popen(self.cmd_string) def printSummary(self): print 'processed num: %d' %mySubProcess.counter # 函数定义 def processMybatFile(file_name): file_obj = open(file_name, 'r') try: linetail_pattern = re.compile('\s*\n.*|\s*//.*', re.S) # 正则表达式 file_lines = file_obj.readlines() for line_str in file_lines: cmd_str = linetail_pattern.split(line_str.decode('gb2312'))[0].encode('gbk') # 转码 if len(cmd_str) > 0: print '> ' + cmd_str a = mySubProcess(cmd_str) # 生成对象 a.run() # 调用对象 finally: file_obj.close() a = mySubProcess() # 使用默认参数生成对象 a.printSummary() # 程序入口 if __name__ == '__main__': # 这样写的话,这个块的内容就不会在当前文件被import的时候执行 if len(sys.argv) == 2: cmdfile_name = sys.argv[1:][0] else: cmdfile_name = 'test.mybat' print 'load: ' + cmdfile_name processMybatFile(cmdfile_name) # 调用函数 |
|
语言本身,总的感觉是有点C++的味道。但是把C++里最晦涩的那坨都扔了。“类变量”比较有特点,用缩进表示block让人厥倒。另外没有变量定义,基本上是变量被赋值的时候决定它的类型,不小心的话,比较容易掉进陷阱。
这个语言很简单,半天时间绝对入门。用它来写写小东西很方便。推荐无聊geek们都来玩玩。
参考资料:
- 简明Python教程,基本语法,快速入门可用,也能当个基本语法速查手册。
- 正则表达式30分钟入门教程,这玩意儿,写正则的时候,当手册用用
标签: 计算
















前两个月看过一阵子
翻了本叫做dive into python的书的前两章
> 英文 http://diveintopython.org
> 中文 http://www.woodpecker.org.cn/diveintopython/
窃以为不错
有乱码,所以稍微编辑了一下原文。
不错,这本书正好有我想读的python-web方面的内容。多谢了~
…你这注释加的太寒了 完全不加也不会影响理解的
倒是那个正则式非得去那个链接看个半天然后才看懂 lol
写的果然又臭又长。。。
俺用python就当作一个支持正则表达式的脚本来用,好像还没用过class.
惊讶发现居然还记得正则表达式@@…好长啊,看了一半就看不动了。。你周末有啥安排啊
准备去天津蹭五石吃大麻花儿
好吧,那我去逛逛经典景点先!你啥时候夏天再去黄草梁ing,抱大腿~咔咔
以前都是rss看你的blog, 今天web上来看看, 还是默认theme啊, 你咋不把这嘎达装修一下呢?
我觉得默认theme蛮好看的。很符合我的simple至上审美观。不过最近应该会加上navigation bar了
你好~其實這篇文章我是完全看不懂的!(我是電腦白痴啊)
純粹是因為知道貴國網路有強大金盾重重設限
閣下居然還願意穿過層層流刺網 鑽過壕溝 躲過地雷來造訪我的小格
非常高興也很感謝!!
北京八天的自由行真的是豐富又精彩 北京是個非常有文化 有底蘊 值得一再品味的城市!
我在北京的相簿密碼是 1018
歡迎您不嫌棄的話來參觀一下囉!
wretch.cc一直被封锁的。。。哭。。。还好ptt我还能逛。。。。我国政府啊,真是一如既往的伟光正——砌起大墙来毫不留情。。。没办法,人家信奉的是:战争即和平,自由即奴役,无知即力量。再次对他送上中指大礼包一对。。。凸-.-凸