创建一个python文件transProtoCmd.py(Mac机)
程序入口
import os
import getpass
if __name__ == '__main__':
username = getpass.getuser()
os.chdir('/Users/' + username + '/Documents/')
print os.getcwd()
handleFile()
os.getcwd()方法获取当前的目录
getpass.getuser() 该函数返回登陆的用户名,不需要参数
os.chdir(‘directoryName’)改变当前工作目录到指定的路径
先来看获取要进行转化的.proto文件有哪些
def getFileInfo():
t = {}
# get protobuf srcPath directory from svn download
# /User/xxx/Documents/public/new_protocol/
dir = os.getcwd()+os.sep+"public/new_protocol/"
# get all .proto file
for filename in os.listdir(dir):
curfile = dir + filename
if os.path.isfile(curfile):
houzhui = curfile[curfile.rfind('.'):]
if houzhui == '.proto':
file = filename[:filename.rfind('.')]
t[file] = curfile
# eg. t['aaa'] = /User/xxx/Documents/public/new_protocol/aaa.proto
return t
假设要将这些文件转为.pb文件,之前用的方法一直都是将.proto文件手动复制到安装了protobuf的拥有protoc命令文件的同级目录下,然后再单个执行命令protoc –descriptor_set_out xxx.pb xxx.proto,生成的.pb文件当然也是在此命令的同级目录,再复制到项目工程中…
现在要批量处理,本来是想通过protoc –descriptor_set_out (想转成的文件的全路径名)(准备转的全路径名),想一键自动生成,发现一直没成功,那只好代码中实现先将这些.proto原文件(比如直接从svn下载下来的)拷贝到protoc命令的同级目录,对.proto文件循环遍历生成.pb,然后将这些.pb拷贝到项目工程目录。
def handleFile():
t = getFileInfo()
username = getpass.getuser()
os.chdir('/Users/' + username + '/protobuf/src/')
table = {}
for key in t.keys():
filename = key
pathname = t[key]
name = filename + '.proto'
strpath = '/Users/ximi/Documents/client/MyProj/protobuff/' + filename + '.proto'
f1 = open(pathname, 'r+')
f2 = open(name, 'w+')
f3 = open(strpath, 'w+')
for s in f1.readlines():
f2.write(s)
f3.write(s)
f1.close()
f2.close()
f3.close()
destname = filename + '.pb '
srcname = filename + '.proto'
cmd = "protoc --descriptor_set_out " + destname + srcname
os.system(cmd)
pathname1 = os.getcwd() + '/' + filename + '.pb'
table[filename] = pathname1
username = getpass.getuser()
# destpath = '/Users/' + username + '/Documents/work2/'
destpath = "/Users/ximi/Documents/client/MyProj/src/app/network/proto/"
for key in table.keys():
filename = key
pathname = table[key]
name = destpath + filename + '.pb'
f1 = open(pathname, 'r+')
f2 = open(name, 'w+')
for s in f1.readlines():
f2.write(s)
f1.close()
f2.close()
这样就将/User/ximi/Documents/public/new_protocol/ 文件下的.proto文件通过命令protoc转为.pb文件,全部自动拷贝到我的项目工程目录/Users/ximi/Documents/client/MyProj/src/app/network/proto/ 里面,并将该.proto文件也拷贝到项目目录/Users/ximi/Documents/client/MyProj/protobuff/ 里面。