黑松山资源网 Design By www.paidiu.com
最近游戏项目在多个国家上线,每个国家都对应两份儿svn目录(一份是本地策划目录,一份是线上目录)。于是乎维护变得很烦躁。需要先更新本地策划svn目录,然后把更新的文件拷贝到对应的线上目录,然后提交线上svn目录,然后维护服务器。多个国家就要重复多次类似的更新,拷贝,提交的操作,还要格外注意不能手抖,出现少复制的错误。这种重复的操作很适合写一个工具来完成。
于是考虑使用python来写这个工具,最基本的操作就是使用python调用svn命令。因为windows安装svn后是没有svn命令行的,所以首先需要下载Apache-Subversion,这是svn命令行工具,解压后设置环境变量。
python调用dos命令,使用下面的方法:
os.popen(command)
此方法会阻塞,直到执行完成,当然也会返回执行的结果。如果你使用chcp设置过windows命令行的代码页,比如曾经使用:chcp 65001。那么在执行python程序的时候就可能产生gbk编码的错误,解决此问题需要重新使用:chcp 936来设置命令行代码页就OK了。
完整代码如下:
import os import shutil ''' 循环执行每个一个资源目录,每个目录的执行过程如下: 1:更新线上目录 2:更新本地目录 3:把本地目录的修改同步到线上目录 4:提交线上目录 ''' #本地svn目录 local_r_en = "server/trunk/resource" local_r_ar = "server/resource_ar" local_r_fr = "server/resource_fr" local_r_ge = "server/resource_ge" local_r_ita = "server/resource_ita" local_r_ru = "server/resource_ru" local_r_sp = "server/resource_sp" local_r_tr = "server/resource_tr" local_r_wp_en = "server/resource_wp" #线上svn目录 online_r_en = "serverOL/resource_en" online_r_ar = "serverOL/resource_ar" online_r_fr = "serverOL/resource_fr" online_r_ge = "serverOL/resource_ge" online_r_ita = "serverOL/resource_ita" online_r_ru = "serverOL/resource_ru" online_r_sp = "serverOL/resource_sp" online_r_tk = "serverOL/resource_tk" online_r_wp_en = "serverOL/resource_wp" #不需要更新的服务器,请把下面对应的资源目录注释掉 recource_dict = {} recource_dict[local_r_en] = online_r_en #美国 # recource_dict[local_r_ar] = online_r_ar #阿拉伯 # recource_dict[local_r_fr] = online_r_fr #法国 # recource_dict[local_r_ge] = online_r_ge #德国 # recource_dict[local_r_ita] = online_r_ita #意大利 # recource_dict[local_r_ru] = online_r_ru #俄罗斯 # recource_dict[local_r_sp] = online_r_sp #西班牙 # recource_dict[local_r_tr] = online_r_tk #土耳其 # recource_dict[local_r_wp] = online_r_wp #wp ''' 复制文件到目的文件 ''' def copyFile(src,dst): #目的目录 dst_dir = dst[:dst.rfind("/")] #如果目录不存在则创建目录,如果文件存在则删除 if not os.path.exists(dst_dir): os.makedirs(dst_dir) elif os.path.exists(dst): os.remove(dst) #复制新文件 shutil.copyfile(src, dst) #end method copyFile ''' 删除文件 ''' def removeFile(dst): if os.path.exists(dst): os.remove(dst) #end method removeFile ''' 打印命令结果 ''' def svnResult(result): for line in result: line = line.replace("\n","") print(line) #end method svnResult ''' svn命令执行 ''' def svnSimpleExecute(command): print("",command) result = os.popen(command).readlines() svnResult(result) #end method svnExecute ''' svn提交目录 ''' def svnCommit(dst): command = "svn status "+dst print("",command) command_result = os.popen(command).readlines() if len(command_result) <= 2: print("没有需要添加,删除和提交的内容") return for line in command_result: #去掉换行符 line = line.replace("\n","") print(line) line = line.replace(" ","") firstChar = line[0:1] filePath = line[1:] #命令 command_add = "svn add "+filePath command_ci = "svn commit -m \"svn tools commit,更新维护。\" "+filePath command_rm = "svn delete "+filePath if firstChar == "":#ADD命令 svnSimpleExecute(command_add) svnSimpleExecute(command_ci) elif firstChar in "ADM":#COMMIT 命令 svnSimpleExecute(command_ci) elif firstChar == "!": #删除命令 svnSimpleExecute(command_rm) svnSimpleExecute(command_ci) else: print("Unkonw.......",line) #end method svnCommit ''' 解析获得对应的本地文件和线上文件路径 ''' def parseLine(line,local_dir,online_dir): line = line.replace("'","") line = line.replace("\\","/") line = line.replace(local_dir,"") pos = line.find("/") return local_dir + line[pos:],online_dir + line[pos:] #end method parseLine #循环资源目录 for local_dir in recource_dict: online_dir = recource_dict[local_dir] #更新线上资源 command_online = "svn up " + online_dir svnSimpleExecute(command_online) #更新本地资源 command_local = "svn up " + local_dir print("",command_local) lines = os.popen(command_local).readlines() if len(lines) <= 2: print("没有更新内容") continue #去掉头和尾部内容 lines.pop(-1) lines.pop(0) for line in lines: #去掉换行符 line = line.replace("\n","") print(line) #解析文件对应目录 localFilePath,onlineFilePath = parseLine(line,local_dir,online_dir) if line.startswith("Restored") or line.startswith("A") or line.startswith("U"): print("复制文件:",localFilePath,"到",onlineFilePath) copyFile(localFilePath,onlineFilePath) elif line.startswith("D"): #删除 print("删除文件:",onlineFilePath) removeFile(onlineFilePath) #提交线上目录 svnCommit(online_dir)
这下维护起来就简单多了,世界瞬间清净了。
以上这篇python3调用windows dos命令的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
黑松山资源网 Design By www.paidiu.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
黑松山资源网 Design By www.paidiu.com
暂无评论...
更新日志
2024年10月07日
2024年10月07日
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】
- 群星.2008-本色·百代音乐人创作专辑【EMI百代】【WAV+CUE】
- 群星.2001-同步过冬AVCD【环球】【WAV+CUE】
- 群星.2020-同步过冬2020冀待晴空【环球】【WAV+CUE】
- 沈雁.1986-四季(2012梦田复刻版)【白云唱片】【WAV+CUE】
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[FLAC/分轨][257.88MB]
- 《国语老歌 怀旧篇 3CD》[WAV/分轨][1.6GB]