龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

python为Java项目增加预编译脚本[组图]

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
早就听说python是一个十分不错的脚本语言,语法简洁而且开发效率很高。在从http://www.python.org下载了最新的windows版本的python解释器后,我又从eclipse的插件网下了pydev这个支持Python在Ec

     早就听说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   


  
精彩图集

赞助商链接