科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件使用python为Java项目增加一个预编译脚本

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

早就听说python是一个十分不错的脚本语言,语法简洁而且开发效率很高。

作者:tangl_99 来源:CSDN 2008年5月18日

关键字: 脚本 java python 软件

  • 评论
  • 分享微博
  • 分享邮件
早就听说python是一个十分不错的脚本语言,语法简洁而且开发效率很高。在从ttp://www.python.org下载了最新的windows版本的python解释器后,我又从eclipse的插件网下了pydev这个支持Python在Eclipse开发的插件。Python虽然是unix/linux下的东西,但是由于其执行和编写都很简单,所以在时常工作中能够快速解决一些小问题。同时,对于以后我需要研究算法,做论文的时候,也可以用python来快速开发一个算法的测试demo,尽量不必纠缠于程序具体实现时候的困难。

   Python语言学起来比较容易,网上据说,python开发的效率比perl,php,ruby都高。在研究了IBM developworks的一篇文章:应用Python解决一些实际问题(ttp://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 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章