分享
 
 
 

使用python为Java项目增加一个预编译脚本

王朝java/jsp·作者佚名  2006-06-29
窄屏简体版  字體: |||超大  

早就听说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行多点,如果用其它语言写,肯定不止这么少。

1

import sys, string, os

2

3

g_sourcepath = ''

4

g_destpath=''

5

g_parsefileext=['java','jsp',

6

'c','cpp','h',

7

'py','pl','php']

8

9

def 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

17

def 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

28

def getsubdir(dirname):

29

basedirlen = len(g_sourcepath)

30

if basedirlen >= len(dirname)-1:

31

return ''

32

subdir = dirname[basedirlen+1:]

33

return subdir

34

35

def 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

48

def 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

66

def 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

117

if len(sys.argv) < 3 :

118

sys.stderr.write("No source directory or dest directory parameter!");

119

else:

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)

125

sys.exit(1)

126

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有