python为Java项目增加预编译脚本
2008-01-05 18:12:58 来源:WEB开发网早就听说python是一个十分不错的脚本语言,语法简洁而且开发效率很高。在从http://www.python.org下载了最新的windows版本的python解释器后,我又从eclipse的插件网下了pydev这个支持Python在Eclipse开发的插件。Python虽然是unix/linux下的东西,但是由于其执行和编写都很简单,所以在时常工作中能够快速解决一些小问题。同时,对于以后我需要研究算法,做论文的时候,也可以用python来快速开发一个算法的测试demo,尽量不必纠缠于程序具体实现时候的困难。
Python语言学起来比较轻易,网上据说,python开发的效率比perl,php,ruby都高。在研究了IBM developworks的一篇文章:应用Python解决一些实际问题(http://www-128.ibm.com/developerworks/cn/linux/tips/l-python/)后,我也为现在正在做的J2ME项目做了个代码的预编译处理脚本。通过扫描java项目中的标签,#if_version,#end_version,从一个原始的J2ME项目自动产生成各个机型的版本,比如NOKIA。索爱,MOTO。下面就是我第一次写的这个Python小程序,总共才100行多点,假如用其它语言写,肯定不止这么少。
1import sys, string, os
2
3g_sourcepath = ''
4g_destpath=''
5g_parsefileext=['java','jsp',
6 'c','cpp','h',
7 'py','pl','php']
8
9def getversionlist():
10 file = open('version.txt','r')
11 lines = file.readlines()
12 file.close()
13 for i in range(len(lines)) :
14 lines[i] = lines[i][:-1]
15 return lines
16
17def isparsefile(filename):
18 splits = os.path.splitext(filename)
19 if len(splits) < 2:
20 return False
21 ext = splits[1]
22 ext = ext[1:]
23 if ext in g_parsefileext :
24 return True
25 else:
26 return False
27
28def getsubdir(dirname):
29 basedirlen = len(g_sourcepath)
30 if basedirlen >= len(dirname)-1:
31 return ''
32 subdir = dirname[basedirlen+1:]
33 return subdir
34
35def scan(arg, dirname, names):
36 for filename in names:
37 # 假如不是文件(还可能是目录),则跳过
38 if os.path.isfile(dirname+'\\'+filename) == False:
39 continue
40 # 假如是生成版本说明文件,则跳过
41 if filename == 'version.txt':
42 continue
43 if isparsefile(filename) :
44 fileparsecopy(dirname,filename,arg)
45 else:
46 fileonlycopy(dirname,filename,arg)
47
48def fileonlycopy(dirname,filename,verlist):
49 srcfilename = dirname+'\\'+filename
50 file = open(srcfilename,'r')
51 text = file.read()
52 file.close()
53 subdir = getsubdir(dirname)
54 for ver in verlist :
55 destfilepath = g_destpath+'\\'+ver
56 if len(subdir) > 0 :
57 destfilepath = destfilepath +'\\'+subdir
58 if(os.path.exists(destfilepath) == False):
59 os.mkdir(destfilepath)
60 destfilename = destfilepath+'\\'+filename
61 file = open(destfilename,'w')
62 file.write(text)
63 file.close()
64 PRint 'copy '+destfilename
65
66def fileparsecopy(dirname,filename,verlist):
67 srcfilename = dirname+'\\'+filename
68 file = open(srcfilename,'r')
69 srclines = file.readlines()
70 file.close()
71
72 subdir = getsubdir(dirname)
73
74 destfiletexts = []
75 for ver in verlist :
76 destfiletexts.append('')
77
78 # 扫描源文件的每一行
79 curverindex = -1
80 lineno = 1
81 for curline in srclines :
82 Wordindex = -1
83 verindex = 0
84 for flag in verlist :
85 if '#if_version '+flag in curline :
86 curverindex = verindex
87 break
88 elif '#end_version' in curline :
89 curverindex = -1
90 break
91 verindex = verindex +1
92
93 if verindex == len(verlist) : # 不是标记行
94 if curverindex >= 0: # 某个版本标记内的行
95 destfiletexts[curverindex] = destfiletexts[curverindex] + curline
96 else : # 所有版本都有的内容
97 for i in range(len(destfiletexts)) :
98 destfiletexts[i] = destfiletexts[i]+ curline
99
100 lineno = lineno +1
101 # 产生各个版本的目标文件
102 verindex = 0;
103 for ver in verlist :
104 destfilepath = g_destpath+'\\'+ver
105 if len(subdir) > 0 :
106 destfilepath = destfilepath +'\\'+subdir
107 if(os.path.exists(destfilepath) == False):
108 os.mkdir(destfilepath)
109 destfilename = destfilepath+'\\'+filename
110 file = open(destfilename,'w')
111 file.write(destfiletexts[verindex])
112 file.close()
113 verindex = verindex + 1
114 print 'parse '+ destfilename
115
116# main
117if len(sys.argv) < 3 :
118 sys.stderr.write("No source Directory or dest directory parameter!");
119else:
120 g_sourcepath = sys.argv[1]
121 g_destpath = sys.argv[2]
122 os.chdir(g_sourcepath)
123 verlist = getversionlist()
124 os.path.walk(g_sourcepath, scan, verlist)
125sys.exit(1)
126
- ››JavaScript拖拽原理的实现
- ››javascript事件列表解说
- ››Javascript代码优化工具UglifyJS
- ››Java Bean属性值动态设置
- ››JavaScript Confirm 失效的解决办法
- ››JavaScript页面内拖拽原理分析
- ››javascript中select的常用操作
- ››javascript+css无刷新实现页面样式的更换
- ››Java Web Services:不使用客户端证书的WS-Securit...
- ››Java开发2.0: 使用Amazon SimpleDB实现云存储,第...
- ››Java异常处理及其应用
- ››Java中遍历大容量map的正确方法
更多精彩
赞助商链接