本来是想写一个东西可以直接调用TortoiseSVN保存当前代码到一个分枝下的。
可惜调用SVN的部分还在研究。就先写了目录拷贝的部分。
如果有喜欢研究Python的童鞋愿意提供想法或者建议的话,
这里先谢谢了。 :)
就目录拷贝的部分,思想很简单。读配置文件中的配置信息。
生成一个项目名称加日期时间组成的文件夹名为分枝名称。把当前项目下的全部内容
拷贝到这个目录下。
然后要做的研究就是调用TortoiseSVN命令嵌入这部分代码。
现在看代码:
1. 读取配置文件
配置文件很简单。用的就是txt文件。 格式类似于:
#root:/Users/lichallenger/test_src/#project:test
#destination:/Users/lichallenger/test_dst/
BTW: 我用的是Mac所以目录格式是这样的。如果你用的是Windows的话请适
当修改配置文件。
读文件就是最简单的了。直接用标准库的文件操作模块打开文件,读出全部的配置。一共就三行,所以
也不用考虑效率什么的了。
#open config file and read config information#author: bruce liclassConfigHandler(object):#def__init__(self,config_path):'''initializer'''self.config_path=config_path#read config infordefread_config(self):
f=open(self.config_path)try:
self.all_lines=f.readlines()except:raiseelse:
f.close()
2. 拷贝目录和目录内容
拷贝目录用了shutil模块。里面有个方法可以直接把目录和目录下的全部内容拷贝到制定的其他目录。
这样就省得搞目录遍历之类的代码了。
#copy dir(s) & file(s) to configured path#author: bruce liimportshutilclassCopyHandler(object):#def__init__(self,src_path,dest_path):
self.src_path=src_path
self.dest_path=dest_pathdefmove_content(self):try:
shutil.copytree(self.src_path,self.dest_path)except:raise@staticmethoddefmove_src_content(src, dest):try:
shutil.copytree(src_path,dest_path)except:raise
3. 综合调用
这里用了time模块获取当前时间,然后生成目标文件夹名称的一部分。
外界给python传的系统参数的第一个是文件名。这个文件就相当于C#项目里的Program文件一样,
里面会包含一个main函数。虽然这个函数不一定要命名为main。
还有注意下,Python代码的换行符为\。
#main of dir copy function
importsysimporttimefromcode_bk_cpyimport*fromcode_bk_configimport*#print __name__defmain():
config_path=sys.argv[1]#check if path of configuration path is emptyif(notconfig_path):print'configuration information is needed'return-1config_handler=ConfigHandler(config_path)
config_handler.read_config()
config_list=config_handler.all_linesiflen(config_list)!=3:print'configuration information is not correct'return-1#set sourcesep=':'current_datetime=time.localtime(time.time())
root_path=config_list[0].split(sep)[1]
prj_name=config_list[1].split(sep)[1]
dst_path=config_list[2].split(sep)[1]
root_path=(root_path+prj_name).replace('\n','')
prj_folder=prj_name+str(current_datetime.tm_year)+str(current_datetime.tm_mon)+\
str(current_datetime.tm_mday)+str(current_datetime.tm_hour)+\
str(current_datetime.tm_min)+str(current_datetime.tm_sec)
dst_path=(dst_path+'/'+prj_folder+'/').replace('\n','')
copy_handler=CopyHandler(root_path,dst_path)
copy_handler.move_content()print'content moved'#start main functionprint__name__if__name__=="__main__":
main()
有时间我会研究下TortoiseSVN调用那块的东西。估计不会难,就是调用exe传参的问题。
本人初学Python,如有问题敬请指正!谢谢。