python操作svn,自动update,中文路径问题
前提条件是电脑上已经安装好tortoisesvn.且经过测试可以从SVN服务器上上传或下载更新文件。
需要注意的是:svn更新到本地的路径或者export到本地的路径如果是中文,utf-8的编码传给svn是会报错的,是乱码识别不了。 Windows下中文的编码格式是gbk .所以要把中文字符串编码为gbk。
svnconfig.py文件
# -*- coding: utf-8 -*- setting={ 'svn':r'D:\Program Files\TortoiseSVN\bin',#svn的程序所在路径 'url':'https://svn.xxxxx.com/svn/nsip/test',#svn地址 'dist':u'D:\\VPN\\代码\\数据仓库存储过程修改备份\\PKG_SRC',#目标地址 'closeOption': ' /closeonend:1' #'interval':15 #更新时间 } # /closeonend:0 不自动关闭对话框 # /closeonend:1 如果没发生错误则自动关闭对话框 # /closeonend:2 如果没发生错误和冲突则自动关闭对话框 # /closeonend:3如果没有错误、冲突和合并,会自动关闭 # /closeonend:4如果没有错误、冲突和合并,会自动关闭
svn_update.py
1 # -*- coding: utf-8 -*- 2 #SVN的目录有中文 3 #svn的命令传英文路径没有问题,中文路径由于编码问题会出现乱码 4 #中文路径是utf-8的编码,传给SVN会出现乱码,识别不了 5 #windows的中文编码是gbk. svn的中文路径需要转化为gbk的编码才能识别 6 #cmd_gbk=cmd.encode("gbk") 7 8 import time 9 import os 10 import svnconfig 11 import sys 12 13 reload(sys) 14 sys.setdefaultencoding('utf8') 15 16 dist= svnconfig.setting['dist_test'] 17 print(dist) 18 #cmd = 'TortoiseProc.exe /command:update /path '+ dist + ' /notempfile' + svnconfig.setting['closeOption'] 19 cmd_utf8 = 'TortoiseProc.exe /command:update /path '+ dist 20 cmd_gbk=cmd_utf8.encode("gbk") #必须得转成gbk,否则是乱码,不能正常执行 21 22 print(cmd_utf8,type(cmd_utf8)) 23 print(cmd_gbk,type(cmd_gbk)) 24 #print(cmd) 25 result = os.system(cmd_gbk) 26 27 if result == 0: 28 print('svn update success') 29 else: 30 print('svn update fail')
中文路径直接使用utf-8,没有编码成gbk之前的报错:
中文路径转化为gbk之后: