2012年4月10日 星期二

[Python]檔案更新器


最近麻煩同事將要更新的程式碼更新正式機時發現,同事是一行一行的下指令,
例如 ︰
cp -a /tmp/1.php /var/www/html/1.php
cp -a /tmp/2.php /var/www/html/2.php
.....
.......
原因是該主機是新建立的自動更新的Shell還沒寫好,
於是就利用點業餘時間使用Python寫了一隻程式更新器給他使用,
當然這隻程式也可以在Windows底下使用,
當然在Linux下使用後,要確認一下檔案更新後的權限喔。
#! /usr/bin/python
# -*- coding: utf-8 -*-
#

import os
import sys
import array
import errno
import shutil
import platform
def main():
  
    operatFolder = "/tmp"
    declare = '/'
    if len(sys.argv) > 1:
        operatFolder = sys.argv[1]     

    while True:
        iv = raw_input("本次更新檔案的來源資料夾是否為︰[" + operatFolder + "] (y/n/e)︰")
        if iv == "y" or iv == "Y":
            break
        elif iv == "n" or iv == "N":
             while True:
                operatFolder = raw_input("請輸入本次更新檔案的來源資料夾位置︰")              
                if os.path.exists(operatFolder) :
                    break
                else:
                    print "[" + operatFolder + "]資料夾不存在請重新輸入"
        else:
            print "下次再為您服務 byebye!!"
            sys.exit(1) 
    if platform.system().lower() == 'windows':
        declare = '\\'
    filesPath = operatFolder + declare + 'files.txt'
    if not os.path.exists(filesPath):
        print '找不到檔案更新清單︰' + filesPath ,
        sys.exit(1)  
 
    fileopen = open(filesPath)
    failCount = successCount = 0
    failUpfateList = []
    while True:
        line = fileopen.readline().replace(' ','').replace('\n','').replace('\r','').replace('\r\n','')
        if not len(line):
            break
        targetPath = line[:(line.rindex(declare)) + 1]
        fileName = line[(line.rindex(declare)) + 1:]     
        sourcePath = operatFolder + declare + fileName
          
        try:        
            if not os.path.isdir(targetPath):
                print targetPath + '目標資料夾不存在,正在重新建立',
                os.mkdir (targetPath)
                print targetPath + '目標資料夾建立完成',
            shutil.copy2(sourcePath,line)
            if os.path.isfile (line):
                print "[" + line + "] copy success"
                successCount += 1   
        except:
            failUpfateList.append("[" + str(line )+ "]" + str(sys.exc_info()[1]))
            failCount += 1
    fileopen.close()
    print '檔案更新完成,總計︰' + str(successCount + failCount) + ' 成功︰' + str(successCount) + ' 失敗︰' + str(failCount)
    if len(failUpfateList) > 0:
        print "檔案更新失敗清單"
        for element in failUpfateList:
            print element
if __name__ == "__main__":  
    main()
使用的方式
1.先將要更新的程式檔案集中放在同一層的資料夾中。
   Ex
       /tmp
2.將程式檔案於正式機的位徑含檔名寫了 files.txt之中
   Ex
       /var/www/html/1.php
       /var/www/html/2.php
3.下執行命令
 Ex
   python update.py
   或者給update.py執行權限
   ./update.py

沒有留言: