首个派上用场的Python脚本
Python is a programming language that lets you work more quickly and integrate your systems more effectively. You can learn to use Python and see almost immediate gains in productivity and lower maintenance costs.
最初看到Python,是在七、八年前,当时它是跟着Linux一起来的,我跟它只是打了个照面,没有言语。后来,我又在一期《程序员》杂志上看到过它,我还记得当时的标题是《动态语言 隔岸观火》,也就是那一次,上下打量了Python/Ruby一番。
工作以后,整天的Java来Java去,虽然Linux还是时不时看到,shell也能说上话,就是不见Python。直到最近,决定要好好地认识认识它,从语法到API,从纸质图书到电子文档,自我感觉算是着了道,就是在工作上遇不到应用场景,这一番本领成了屠龙之技。
这次机会来了,有这么一个场景:首先执行命令1,得到执行结果,并对内容抽取其中地字符串,接着执行第二个命令2,并将前一步得到地字符串作为参数传入。逻辑是不复杂,实现也简单,我把这段代码粘贴出来,做个标记,毕竟这是第一个在工作中派上用场的脚本。
#!/usr/bin/python import re import sys import subprocess def get_package(apk): s = subprocess.Popen(['aapt', 'dump', 'badging', apk], stdout=subprocess.PIPE) out = s.stdout.read() m = re.search(r"'(w|.)*'", out) package = m.group() package = package.replace("'", "") return package def clean(): subprocess.call(['ant', 'clean']) def create_apk(package): print 'new package %s' % package s = subprocess.Popen(['ant', '-f', 'build_wrapper.xml', 'debug', '-Dpackage.name', package]) def create(apk): clean() package = get_package(apk) create_apk(package) def prhelp(): print '''Usage: wrapapp.py [options] apkfile Options: -h, --help show this help message and exit -v, --version print the version number and exit ''' if (len(sys.argv) != 2): print 'Option error!' prhelp() exit() elif '-h' in sys.argv or '--help' in sys.argv: prhelp() exit() elif '-v' in sys.argv or '--version' in sys.argv: print '1.00' exit() else: create(sys.argv[1]) exit() |
以上代码在Mac OS X Snow Leopard && Python 2.6上运行通过,结果符合预期,虽然代码组织、逻辑严谨性方面还比较稚嫩,但也算作是我的开山之作了。就这样,蛮以为万事大吉,不料同事反馈这段脚本在Windows 7上无法运行。
一番排查,错误定位在了subprocess.Popen
和subprocess.call
上,Mac可以运行,Windows无法运行,这多半出在移植方面。仔细读了读文档,在二者加入shell=True
,代码终于可以欢快地跑在Windows上了。