侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python3调用windows dos命令的例子

Python  /  管理员 发布于 5年前   372

最近游戏项目在多个国家上线,每个国家都对应两份儿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 osimport 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命令的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    使用Windows批处理和WMI设置Python的环境变量方法
    下一条:
    用Python调用win命令行提高工作效率的实例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客