python从零开始--31 python解决工作小问题之 SVN自动update

问题:因为工作中有个特别的需求,我需要每天手动去更新10几个文件夹的SVN,考虑到已经学了一段时间的python,是时候让它发挥一下。通过查资料,编写,调试,已经成功搞定。 下面是思路和代码。

思路:

1. 我用的TortoiseSVN客户端,经过查其帮助手册,发现其支持CMD操作

python从零开始--31 python解决工作小问题之 SVN自动update_第1张图片

2. 于是考虑用先将cmd拼凑出来,然后用python的执行命令行的方法来执行。

3. 还要考虑加上些简单的log文件,我放弃使用TortoiseProc提供的log文件,自己写些log生成代码

4. 为了方便后面做变更,将所有可能变更的部分用一个配置文件处理;逻辑处理则用另外一个单独的文件。

5. 因为要运行的脚本的电脑没有python,为了避免麻烦,用pyinstaller生成exe文件,方便运行。

代码:

配置文件:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/5/21 10:01
# @Author  : PanCheng
# @Site    : 
# @File    : svnconfig.py
# @Software: PyCharm

setting={
    'svn':'C:/Program Files/TortoiseSVN/bin/',#svn的程序所在路径
    'interval':21600, # 更新时间,单位秒  这里设置6个小时更新一次
    'logFile': 'E:/197Backup/logFile.txt', # log文件放置位置
    'closeOption': ' /closeonend:1'
}
# /closeonend:0 不自动关闭对话框
# /closeonend:1 如果没发生错误则自动关闭对话框
# /closeonend:2 如果没发生错误和冲突则自动关闭对话框
# /closeonend:3如果没有错误、冲突和合并,会自动关闭
# /closeonend:4如果没有错误、冲突和合并,会自动关闭

dist_lists = [  # 需要更新的folder路径列表
    "E:/197Backup/BJFLT/",
    "E:/197Backup/BusinessKnowledge/",
    "E:/197Backup/CASL/",
    "E:/197Backup/CMMIDoc/",
    "E:/197Backup/HangCai/",
    "E:/197Backup/HangYi/",
    "E:/197Backup/HKA/",
    "E:/197Backup/HNAIE/",
    "E:/197Backup/HR/",
    "E:/197Backup/HTMPM/",
    "E:/197Backup/ICBCepay/",
    "E:/197Backup/PPCS/",
    "E:/197Backup/QC/",
    "E:/197Backup/QD/",
    "E:/197Backup/SEG/",
    "E:/197Backup/SZAIR/",
    "E:/197Backup/TechnicalTeam/",
    "E:/197Backup/TianHangChengBen/",
    "E:/197Backup/UE/",
    "E:/197Backup/UE_E/"
]

逻辑处理文件:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/5/21 9:22
# @Author  : PanCheng
# @Site    : 
# @File    : SVNUpdate.py
# @Software: PyCharm

import time,os
from practise.svnconfig import setting, dist_lists

# 全局变量

# 用于存放每次运行update_all_dists期间的logs
logs = []

# 运行命令行需先进入SVN所在的路径
os.chdir(setting['svn'])

# 执行更新并记录更新成功或失败的logs
def update_all_dists():
    # 遍历所有需要更新的SVN floders,将更新的cmd拼出来
    for dist in dist_lists:
        cmd = 'TortoiseProc.exe /command:update /path ' + dist + setting['closeOption']

    # 记录下更新的时间
        log_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
        log = 'Execute ' + cmd + " --- Time " + log_time + '\n'
        logs.append(log)

    #   执行更新   (这里后面还需要加上对更新失败的处理)
        update_result = os.system(cmd)

    #  更新完毕,添加成功与否的log
        if update_result == 0:
            log = 'SUCCESS: update ' + dist + ' success' + '\n'
        else:
            log = 'FAIL: update ' + dist + ' fail' + '\n'
        logs.append(log)

    # 将log写入给定的log file
    with open(setting['logFile'], 'a') as f:
        logs.append("******************************************************** next update")
        for l in logs:
            f.write(l)

    # 将logs[]清空,为下次循环做准备
    logs.clear()


if __name__ == "__main__":
    # 每隔一段时间运行一次更新
    while True:
        update_all_dists()
        time.sleep(setting['interval'])


后续需要优化的部分:

对更新失败的处理

你可能感兴趣的:(python从零开始--31 python解决工作小问题之 SVN自动update)