欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python3調用windows dos命令的例子

系統 1701 0

最近游戲項目在多個國家上線,每個國家都對應兩份兒svn目錄(一份是本地策劃目錄,一份是線上目錄)。于是乎維護變得很煩躁。需要先更新本地策劃svn目錄,然后把更新的文件拷貝到對應的線上目錄,然后提交線上svn目錄,然后維護服務器。多個國家就要重復多次類似的更新,拷貝,提交的操作,還要格外注意不能手抖,出現少復制的錯誤。這種重復的操作很適合寫一個工具來完成。

于是考慮使用python來寫這個工具,最基本的操作就是使用python調用svn命令。因為windows安裝svn后是沒有svn命令行的,所以首先需要下載Apache-Subversion,這是svn命令行工具,解壓后設置環境變量。

python調用dos命令,使用下面的方法:

            
os.popen(command)
          

此方法會阻塞,直到執行完成,當然也會返回執行的結果。如果你使用chcp設置過windows命令行的代碼頁,比如曾經使用:chcp 65001。那么在執行python程序的時候就可能產生gbk編碼的錯誤,解決此問題需要重新使用:chcp 936來設置命令行代碼頁就OK了。

完整代碼如下:

            
import os
import shutil

'''

循環執行每個一個資源目錄,每個目錄的執行過程如下:

  1:更新線上目錄
  2:更新本地目錄
  3:把本地目錄的修改同步到線上目錄
  4:提交線上目錄

'''

#本地svn目錄
local_r_en = "server/trunk/resource"
local_r_ar = "server/resource_ar"
local_r_fr = "server/resource_fr"
local_r_ge = "server/resource_ge"
local_r_ita = "server/resource_ita"
local_r_ru = "server/resource_ru"
local_r_sp = "server/resource_sp"
local_r_tr = "server/resource_tr"
local_r_wp_en = "server/resource_wp"

#線上svn目錄
online_r_en = "serverOL/resource_en"
online_r_ar = "serverOL/resource_ar"
online_r_fr = "serverOL/resource_fr"
online_r_ge = "serverOL/resource_ge"
online_r_ita = "serverOL/resource_ita"
online_r_ru = "serverOL/resource_ru"
online_r_sp = "serverOL/resource_sp"
online_r_tk = "serverOL/resource_tk"
online_r_wp_en = "serverOL/resource_wp"


#不需要更新的服務器,請把下面對應的資源目錄注釋掉
recource_dict = {}
recource_dict[local_r_en] = online_r_en       #美國
# recource_dict[local_r_ar] = online_r_ar      #阿拉伯
# recource_dict[local_r_fr] = online_r_fr      #法國
# recource_dict[local_r_ge] = online_r_ge      #德國
# recource_dict[local_r_ita] = online_r_ita     #意大利
# recource_dict[local_r_ru] = online_r_ru      #俄羅斯
# recource_dict[local_r_sp] = online_r_sp      #西班牙
# recource_dict[local_r_tr] = online_r_tk      #土耳其
# recource_dict[local_r_wp] = online_r_wp    #wp



'''
復制文件到目的文件
'''
def copyFile(src,dst):
  #目的目錄
  dst_dir = dst[:dst.rfind("/")]

  #如果目錄不存在則創建目錄,如果文件存在則刪除
  if not os.path.exists(dst_dir):
    os.makedirs(dst_dir)
  elif os.path.exists(dst):
    os.remove(dst)

  #復制新文件
  shutil.copyfile(src, dst)
#end method copyFile

'''
刪除文件
'''
def removeFile(dst):
  if os.path.exists(dst):
    os.remove(dst)
#end method removeFile


'''
打印命令結果
'''
def svnResult(result):
  for line in result:
    line = line.replace("\n","")
    print(line)
#end method svnResult


'''
svn命令執行
'''
def svnSimpleExecute(command):
  print(">>",command)
  result = os.popen(command).readlines()
  svnResult(result)
#end method svnExecute


'''
svn提交目錄
'''
def svnCommit(dst):
  command = "svn status "+dst
  print(">>",command)
  command_result = os.popen(command).readlines()
  if len(command_result) <= 2:
    print("沒有需要添加,刪除和提交的內容")
    return

  for line in command_result:
    #去掉換行符
    line = line.replace("\n","")
    print(line)
    line = line.replace(" ","")
    firstChar = line[0:1]
    filePath = line[1:]
    #命令
    command_add = "svn add "+filePath
    command_ci = "svn commit -m \"svn tools commit,更新維護。\" "+filePath
    command_rm = "svn delete "+filePath

    if firstChar == "?":#ADD命令
      svnSimpleExecute(command_add)
      svnSimpleExecute(command_ci)
    elif firstChar in "ADM":#COMMIT 命令
      svnSimpleExecute(command_ci)
    elif firstChar == "!": #刪除命令
      svnSimpleExecute(command_rm)
      svnSimpleExecute(command_ci)
    else:
      print("Unkonw.......",line)
#end method svnCommit


'''
解析獲得對應的本地文件和線上文件路徑
'''
def parseLine(line,local_dir,online_dir):
  line = line.replace("'","")
  line = line.replace("\\","/")
  line = line.replace(local_dir,"")
  pos = line.find("/")
  return local_dir + line[pos:],online_dir + line[pos:]
#end method parseLine


#循環資源目錄
for local_dir in recource_dict:
  online_dir = recource_dict[local_dir]

  #更新線上資源
  command_online = "svn up " + online_dir
  svnSimpleExecute(command_online)

  #更新本地資源
  command_local = "svn up " + local_dir
  print(">>",command_local)

  lines = os.popen(command_local).readlines()
  if len(lines) <= 2:
    print("沒有更新內容")
    continue

  #去掉頭和尾部內容
  lines.pop(-1)
  lines.pop(0)

  for line in lines:
    #去掉換行符
    line = line.replace("\n","")
    print(line)
    #解析文件對應目錄
    localFilePath,onlineFilePath = parseLine(line,local_dir,online_dir)

    if line.startswith("Restored") or line.startswith("A") or line.startswith("U"):
      print("復制文件:",localFilePath,"到",onlineFilePath) 
      copyFile(localFilePath,onlineFilePath)
    elif line.startswith("D"):
      #刪除
      print("刪除文件:",onlineFilePath)
      removeFile(onlineFilePath)

  #提交線上目錄
  svnCommit(online_dir)

          

這下維護起來就簡單多了,世界瞬間清凈了。

以上這篇python3調用windows dos命令的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品日韩视频 | 精品欧美成人高清视频在线观看 | 三上悠亚2022最新番号 | 色之综合天天综合色天天棕色 | 成人免费网址在线 | 久久99国产精品视频 | 九九视频在线看精品 | jizzjizzjizzjizz国产 | 无码免费人妻A片AAA毛 | 欧美久久天天综合香蕉伊 | 亚洲在线影院 | 日本翁熄系列乱在线视频 | 日本黄色福利视频 | av在线免费观看播放 | 欧美一区二区三区成人精品 | 91短视频在线视频 | 欧美国产一区二区三区 | 老头巨大校花体内驰骋小说文 | 亚洲精品第一综合99久久 | 一区二区三区视频在线播放 | 99视频这里只有精品国产 | 亚洲人成亚洲人成在线观看 | 国产九九视频在线观看 | 色婷婷社区 | av影音资源 | 四虎综合 | 锵锵锵锵锵锵锵锵锵好湿好大 | 国产精品欧美一区二区三区不卡 | 久久久免费电影 | 性色av一区二区三区 | 亚洲无线视频 | 欧美高清视频一区 | 日本在线视 | 天天插天天狠天天透 | 猛h辣h高h文湿快穿np | 欧美成人黑人视频免费观看 | 日韩国产精品一区二区三区 | 国产999精品久久久久久 | 久久草在线 | www.色网站| 精品久久久久久无码中文字幕 |