使用 Python 书写项目打包程序(已经存在 shell 的脚本,经过对比 Python 脚本的执行过程更加的可控人性化实现的功能相同)

  1. #!/usr/bin/env python
  2. # _*_coding:utf-8_*_
  3. # author: 'Edward.Liu'
  4. # dateTime: '15/12/9'
  5. # motto: 'Good memory as bad written'
  6. import datetime, time
  7. import os
  8. import shutil
  9. import subprocess
  10. import tarfile
  11.  
  12. class Packages(object):
  13. def __init__(self):
  14. self.SVN_Checked_Directory = "/install/online/"
  15. self.Project_Directory_F = "%scybershop-front/target" % self.SVN_Checked_Directory
  16. self.Project_Directory_B = "%scybershop-web/target" % self.SVN_Checked_Directory
  17. self.Upload_Directory = "/software/backwar/"
  18. self.Project_Directory_F_Name = "cybershop-front-0.0.1-SNAPSHOT.war"
  19. self.Project_Directory_B_Name = "cybershop-web-0.0.1-SNAPSHOT.war"
  20. self.density_name = ['pro', 'demo', 'ptest']
  21. self.bulid_home = "/install/maven/bin/mvn"
  22. self.date_time = datetime.datetime.now().strftime('%Y-%m-%d-%H')
  23.  
  24. def Subervison_Check(self):
  25. global SVN_NUMBER
  26. try:
  27. while True:
  28. SVN_NUMBER = raw_input("\033[32mPleae Input SVN Update Number:\033[0m").strip()
  29. if SVN_NUMBER.isdigit():
  30. SVN_NUMBER = int(SVN_NUMBER)
  31. if os.path.exists(self.SVN_Checked_Directory):
  32. print "------------------------------"
  33. os.chdir(self.SVN_Checked_Directory)
  34. svn_update = "/usr/bin/svn update -r %s" % SVN_NUMBER
  35. subprocess.call(svn_update, shell=True)
  36. break
  37. else:
  38. print "++++++++++++++++++++++++++++++"
  39. os.makedirs(self.SVN_Checked_Directory)
  40. os.chdir(self.SVN_Checked_Directory)
  41. svn_update = "/usr/bin/svn update -r %s" % SVN_NUMBER
  42. subprocess.call(svn_update, shell=True)
  43. break
  44. else:
  45. print "\033[31mPlease SVN Number\033[0m"
  46. except KeyboardInterrupt:
  47. print 'ctrl+d or z'
  48.  
  49. def Bulid(self):
  50. global env
  51. # 编译项目(分环境)
  52. # 获取生成项目的文件名-- get
  53. bulided_File_Path_F = "%s/%s" % (self.Project_Directory_F, self.Project_Directory_F_Name)
  54. # ---get end
  55. # 编译环境选择--- select---> Maven
  56. for index, value in enumerate(self.density_name):
  57. print index, "Carrefour" + "---->" + value
  58. try:
  59. while True:
  60. Chose_ENV = raw_input("\033[32mChose Density Environment:\033[0m")
  61. if Chose_ENV.isdigit():
  62. Chose_ENV = int(Chose_ENV)
  63. env = self.density_name[Chose_ENV]
  64. try:
  65. if self.density_name[Chose_ENV] == 'pro':
  66. os.chdir(self.SVN_Checked_Directory)
  67. bulid_command = "%s clean install -PcarrefourPro -DskipTests" % self.bulid_home
  68. subprocess.call(bulid_command, shell=True)
  69. if os.path.isfile(bulided_File_Path_F):
  70. print "\033[32mBulid %s SuccessFul\033[0m" % self.density_name[Chose_ENV]
  71. print "\033[32m--------------------Create TarFiles--------------------\033[0m"
  72. self.Files_Handle()
  73. break
  74. elif self.density_name[Chose_ENV] == 'demo':
  75. os.chdir(self.SVN_Checked_Directory)
  76. bulid_command = "%s clean install -Pcarrefour -DskipTests" % self.bulid_home
  77. subprocess.call(bulid_command, shell=True)
  78. if os.path.isfile(bulided_File_Path_F):
  79. print "\033[32mBulid %s SuccessFul\033[0m" % self.density_name[Chose_ENV]
  80. print "\033[32m--------------------Create TarFiles--------------------\033[0m"
  81. self.Files_Handle()
  82. break
  83. elif self.density_name[Chose_ENV] == 'ptest':
  84. os.chdir(self.SVN_Checked_Directory)
  85. bulid_command = "%s clean install -PcarrefourPtest -DskipTests" % self.bulid_home
  86. subprocess.call(bulid_command, shell=True)
  87. if os.path.isfile(bulided_File_Path_F):
  88. print "\033[32mBulid %s SuccessFul\033[0m" % self.density_name[Chose_ENV]
  89. print "\033[32m--------------------Create TarFiles--------------------\033[0m"
  90. self.Files_Handle()
  91. break
  92. except IndexError:
  93. print "\033[31mSelect error\033[0m"
  94. except KeyboardInterrupt:
  95. print "\033[32m Quit\033[0m"
  96. # select----Maven--->END
  97.  
  98. def Files_Handle(self):
  99. # 生成文件处理
  100. # 文件压缩----tar
  101. Tmp_density_dir = "/software/%s%s-%s" % (env, SVN_NUMBER, self.date_time)
  102. os.makedirs(Tmp_density_dir)
  103. source_fiels = ["%s/%s" % (self.Project_Directory_F, self.Project_Directory_F_Name),
  104. "%s/%s" % (self.Project_Directory_B, self.Project_Directory_B_Name)]
  105. for i in range(2):
  106. shutil.move(source_fiels[i], Tmp_density_dir)
  107. # 创建压缩包
  108. os.chdir("/software")
  109. tarfile_name = "%s.tar.gz" % Tmp_density_dir.split('/')[2]
  110. tar = tarfile.open(tarfile_name, "w:gz")
  111. tar.add(Tmp_density_dir.split('/')[2])
  112. tar.close()
  113. # 创建压缩包---end
  114. if os.path.exists(tarfile_name):
  115. print "\033[32m----------Delete Temporary Files%s----------\033[0m" % datetime.datetime.now().strftime(
  116. '%Y-%m-%d %H:%M:%S %f')
  117. shutil.rmtree(Tmp_density_dir)
  118. shutil.move(tarfile_name, self.Upload_Directory)
  119. Upload_Files_Name = "%s%s" % (self.Upload_Directory, tarfile_name)
  120. print "\033[32mSuccessful Download address:URL/%s\033[0m" % tarfile_name
  121. else:
  122. print "\033[31m----------Create archive Is Failed%s----------\033[0m" % datetime.datetime.now().strftime(
  123. '%Y-%m-%d %H:%M:%S %f')
  124. # 删除临时文件
  125. print "\033[32m---------Remove the compiled file%s----------\033[0m" % datetime.datetime.now().strftime(
  126. '%Y-%m-%d %H:%M:%S %f')
  127. if os.path.exists(Upload_Files_Name):
  128. os.chdir("/software")
  129. find_tmp = "find %s -name target" % self.SVN_Checked_Directory
  130. porc = subprocess.Popen(find_tmp, shell=True, stdout=subprocess.PIPE)
  131. export, err = porc.communicate()
  132. out_files = open("path_list.txt", "w")
  133. out_files.write(export)
  134. out_files.close()
  135. fileHandle = open('path_list.txt')
  136. for line in fileHandle.readlines():
  137. print "\033[31mRemove Target\033[0m", line
  138. shutil.rmtree(line.strip('\n'))
  139. fileHandle.close()
  140. os.remove("path_list.txt")
  141. # 删除文件----end
  142.  
  143. def usage(self):
  144. script_name = "packages.py"
  145. print "\033[31m*****************************************\033[0m"
  146. print "\033[31m|------------Packages Useage------------|\033[0m"
  147. print "\033[32m|------------./%s--------------|\033[0m" % script_name
  148. print "\033[32m|------------<path>/%s---------|\033[0m" % script_name
  149. print "\033[32m|----------脚本执行过程2部人工干预------|\033[0m"
  150. print "\033[32m|----------1.收到输入 SVN 版本号--------|\033[0m"
  151. print "\033[32m|----------2.选择需要打包的环境---------|\033[0m"
  152. print "\033[32m|----------3.复制输出下载链接进行下载---|\033[0m"
  153. print "\033[31m******************************************\033[0m"
  154.  
  155. if __name__ == '__main__':
  156. Run_packages = Packages()
  157. Run_packages.usage()
  158. Run_packages.Subervison_Check()
  159. Run_packages.Bulid()

Python package project的更多相关文章

  1. graphterm 0.40.1 : Python Package Index

    graphterm 0.40.1 : Python Package Index graphterm 0.40.1 Downloads ↓ A Graphical Terminal Interface ...

  2. How to using PyPI publish a Python package

    How to using PyPI publish a Python package PyPI & Python package https://pypi.org/ main make a f ...

  3. 使用NuGet Package Project快速制作NuGet包

    今天在visual studio gallery发现了一个插件NuGet Package Project,通过它可以在Visual Studio中建立Nuget Package工程,直接生成Nuget ...

  4. Ghost.py 0.1b3 : Python Package Index

    Ghost.py 0.1b3 : Python Package Index Ghost.py 0.1b3 Download Ghost.py-0.1b3.tar.gz Webkit based web ...

  5. pyrailgun 0.24 : Python Package Index

    pyrailgun 0.24 : Python Package Index pyrailgun 0.24 Download pyrailgun-0.24.zip Fast Crawler For Py ...

  6. qrcode 4.0.4 : Python Package Index

    qrcode 4.0.4 : Python Package Index qrcode 4.0.4 Download qrcode-4.0.4.tar.gz QR Code image generato ...

  7. bottle-session 0.3 : Python Package Index

    bottle-session 0.3 : Python Package Index bottle-session 0.3

  8. bottle-session 0.2 : Python Package Index

    bottle-session 0.2 : Python Package Index bottle-session 0.2 Download bottle-session-0.2.tar.gz Redi ...

  9. django-cookieless 0.7 : Python Package Index

    django-cookieless 0.7 : Python Package Index django-cookieless 0.7 Download django-cookieless-0.7.ta ...

随机推荐

  1. Matlab矩阵间快速赋值方法

    目前还没见到网上用过这个简单的方式 A= [1 2 3; 4 5 6; 7 8 9] B = zeros(5,5) B(1:3, 2:4) = A     %将A赋值到B的第1行到3行,第2列岛4列, ...

  2. Python实用笔记 (10)高级特性——生成器

    通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...

  3. ajax前后端交互原理(6)

    6.XMLHttpRequest对象 XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能.它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页 ...

  4. C#/VB.NET 在PDF中添加文件包(Portfolio)

    PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word.Excel.PDF.PowerPoint和图片等集合到一个PDF文件中,用户可以打开.更改PDF文件包中的单个文件.添加文件包 ...

  5. 【总结】LINQ查询基本操作列表

    每个LINQ查询都以from子句开始,from子句包括以下两个功能. 指定查询将采用数据源. 定义一个本地变量,表示数据源中单个元素. string[] values = { "中国&quo ...

  6. JavaScript基础Literal 与 Constructor(008)

    JavaScript支持以字面声名法(Literal)的方式来声名对象和数组,相对于构造函数(constructor)的方式,Literal的声 名方式更简洁,更易读,也更少导致Bug.事实上,JSO ...

  7. 洛谷 P1194 【买礼物】

    这道题其实就是转化一个模型就可以了. 买了一个另外一个又优惠,其实就相当于在优惠的时候连一条边,因为不可能多买,所以就是建一棵最小生成树.最后因为肯定买了一件物品,要加上最初的单价. 代码: #inc ...

  8. css3盒子模型中的box-sizing属性的使用_box sizing常用的3种属性

    box-sizing属性用来定义元素的width和height所表示的区域,该属性一般有三种值:content-box.border-box.inherit.其中inherit表示box-sizing ...

  9. 洛谷 P4910 帕秋莉的手环

    题意 多组数据,给出一个环,要求不能有连续的\(1\),求出满足条件的方案数 \(1\le T \le 10, 1\le n \le 10^{18}\) 思路 20pts 暴力枚举(不会写 60pts ...

  10. 「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数

    「线段树」「单点修改」洛谷P1198 [JSOI2008]最大数 题面描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数, ...