最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3調(diào)用windows dos命令的例子

 更新時(shí)間:2019年08月14日 13:31:16   作者:褚金輝  
今天小編就為大家分享一篇python3調(diào)用windows dos命令的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近游戲項(xiàng)目在多個(gè)國(guó)家上線,每個(gè)國(guó)家都對(duì)應(yīng)兩份兒svn目錄(一份是本地策劃目錄,一份是線上目錄)。于是乎維護(hù)變得很煩躁。需要先更新本地策劃svn目錄,然后把更新的文件拷貝到對(duì)應(yīng)的線上目錄,然后提交線上svn目錄,然后維護(hù)服務(wù)器。多個(gè)國(guó)家就要重復(fù)多次類似的更新,拷貝,提交的操作,還要格外注意不能手抖,出現(xiàn)少?gòu)?fù)制的錯(cuò)誤。這種重復(fù)的操作很適合寫(xiě)一個(gè)工具來(lái)完成。

于是考慮使用python來(lái)寫(xiě)這個(gè)工具,最基本的操作就是使用python調(diào)用svn命令。因?yàn)閣indows安裝svn后是沒(méi)有svn命令行的,所以首先需要下載Apache-Subversion,這是svn命令行工具,解壓后設(shè)置環(huán)境變量。

python調(diào)用dos命令,使用下面的方法:

os.popen(command)

此方法會(huì)阻塞,直到執(zhí)行完成,當(dāng)然也會(huì)返回執(zhí)行的結(jié)果。如果你使用chcp設(shè)置過(guò)windows命令行的代碼頁(yè),比如曾經(jīng)使用:chcp 65001。那么在執(zhí)行python程序的時(shí)候就可能產(chǎn)生gbk編碼的錯(cuò)誤,解決此問(wèn)題需要重新使用:chcp 936來(lái)設(shè)置命令行代碼頁(yè)就OK了。

完整代碼如下:

import os
import shutil

'''

循環(huán)執(zhí)行每個(gè)一個(gè)資源目錄,每個(gè)目錄的執(zhí)行過(guò)程如下:

  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"


#不需要更新的服務(wù)器,請(qǐng)把下面對(duì)應(yīng)的資源目錄注釋掉
recource_dict = {}
recource_dict[local_r_en] = online_r_en       #美國(guó)
# recource_dict[local_r_ar] = online_r_ar      #阿拉伯
# recource_dict[local_r_fr] = online_r_fr      #法國(guó)
# recource_dict[local_r_ge] = online_r_ge      #德國(guó)
# 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



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

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

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

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


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


'''
svn命令執(zhí)行
'''
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("沒(méi)有需要添加,刪除和提交的內(nèi)容")
    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,更新維護(hù)。\" "+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


'''
解析獲得對(duì)應(yīng)的本地文件和線上文件路徑
'''
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


#循環(huán)資源目錄
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("沒(méi)有更新內(nèi)容")
    continue

  #去掉頭和尾部?jī)?nèi)容
  lines.pop(-1)
  lines.pop(0)

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

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

  #提交線上目錄
  svnCommit(online_dir)

這下維護(hù)起來(lái)就簡(jiǎn)單多了,世界瞬間清凈了。

以上這篇python3調(diào)用windows dos命令的例子就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python OpenCV GrabCut使用實(shí)例解析

    python OpenCV GrabCut使用實(shí)例解析

    這篇文章主要介紹了python OpenCV GrabCut使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • pytorch __init__、forward與__call__的用法小結(jié)

    pytorch __init__、forward與__call__的用法小結(jié)

    這篇文章主要介紹了pytorch __init__、forward與__call__的用法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • python threading模塊的使用指南

    python threading模塊的使用指南

    python的thread模塊是底層的模塊,python的threading模塊是對(duì)thread做了一些包裝的,可以更加方便的被使用。本文詳細(xì)的講述了threading模塊的用法
    2021-06-06
  • Python實(shí)現(xiàn)文件操作幫助類的示例代碼

    Python實(shí)現(xiàn)文件操作幫助類的示例代碼

    在使用Python進(jìn)行業(yè)務(wù)開(kāi)發(fā)的時(shí)候,需要將一些數(shù)據(jù)保存到本地文件存儲(chǔ),方便后面進(jìn)行數(shù)據(jù)分析展示,本文就來(lái)用Python制作一個(gè)文件操作幫助類,需要的可以參考一下
    2023-03-03
  • python數(shù)據(jù)操作之lambda表達(dá)式詳情

    python數(shù)據(jù)操作之lambda表達(dá)式詳情

    這篇文章主要介紹了python數(shù)據(jù)操作之lambda表達(dá)式詳情,文章基于python的相關(guān)資料展開(kāi)lambda表達(dá)式具體的內(nèi)容,感興趣的小伙伴可以參考一下
    2022-05-05
  • 對(duì)pandas的層次索引與取值的新方法詳解

    對(duì)pandas的層次索引與取值的新方法詳解

    今天小編就為大家分享一篇對(duì)pandas的層次索引與取值的新方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python實(shí)現(xiàn)優(yōu)雅編寫(xiě)LaTeX的示例代碼

    Python實(shí)現(xiàn)優(yōu)雅編寫(xiě)LaTeX的示例代碼

    LaTeX?是一種廣泛用于排版學(xué)術(shù)論文、報(bào)告、書(shū)籍和演示文稿的標(biāo)記語(yǔ)言,本文主要為大家詳細(xì)介紹了如何使用?Python?來(lái)優(yōu)雅地編寫(xiě)?LaTeX,提高效率并減少錯(cuò)誤,需要的可以參考下
    2024-02-02
  • pytest內(nèi)置fixture使用臨時(shí)目錄流程詳解

    pytest內(nèi)置fixture使用臨時(shí)目錄流程詳解

    fixture是在測(cè)試函數(shù)運(yùn)行前后,由pytest執(zhí)行的外殼函數(shù)。fixture中的代碼可以定制,滿足多變的測(cè)試需求,包括定義傳入測(cè)試中的數(shù)據(jù)集、配置測(cè)試前系統(tǒng)的初始狀態(tài)、為批量測(cè)試提供數(shù)據(jù)源等等。fixture是pytest的精髓所在
    2022-12-12
  • python繪制箱線圖boxplot()的教程詳解

    python繪制箱線圖boxplot()的教程詳解

    本文主要介紹了python如何繪制箱線圖boxplot()的方法教程,文中有詳細(xì)的代碼示例和圖文講解,需要的朋友可以參考下
    2023-05-05
  • 下載python中Crypto庫(kù)報(bào)錯(cuò):ModuleNotFoundError: No module named ‘Crypto’的解決

    下載python中Crypto庫(kù)報(bào)錯(cuò):ModuleNotFoundError: No module named ‘Cry

    Crypto不是自帶的模塊,需要下載。下面這篇文章主要給大家介紹了關(guān)于下載python中Crypto庫(kù)報(bào)錯(cuò):ModuleNotFoundError: No module named 'Crypto'的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-04-04

最新評(píng)論

吉水县| 临朐县| 黔西| 名山县| 乌什县| 乐至县| 万宁市| 盐池县| 汾阳市| 湖州市| 新泰市| 通化市| 房山区| 汾阳市| 临邑县| 盐池县| 阜宁县| 车险| 长岛县| 应城市| 宜宾县| 淳安县| 织金县| 丰原市| 武强县| 车险| 郸城县| 耿马| 东乌珠穆沁旗| 南涧| 荣昌县| 辰溪县| 章丘市| 张家口市| 上蔡县| 会泽县| 南川市| 始兴县| 迁安市| 达孜县| 闸北区|