当前位置: 首页 > article >正文

学习使用Python执行P4操作

目标

之前学习了使用命令行来执行P4操作,调用起来比较方便,不必配置什么环境,但是缺点是,无法对返回信息进行处理。
而使用C++来执行P4操作,功能上比较完善,但缺点就是需要配置环境,调用起来也相对麻烦。

本篇将尝试学习使用Python来执行P4操作。本质上还是对P4命令行进行封装。但是由于可以得到返回的信息,所以可以在Python中通过脚本来对返回的信息进行处理。

python获得命令行返回值

使用python来调用命令行并得到返回值的方法,似乎有很多。不过本篇将选择使用 subprocess模块(这篇知乎也对它有一些介绍)

比如,可以通过下面python脚本来调用p4 info

import subprocess
output = subprocess.check_output("p4 info", shell=True)
print(output )

将上面代码保存为py文件,然后用python调用,将会看到:
在这里插入图片描述

需要注意的是,正如subprocess模块官方文档所说:

By default, this function will return the data as encoded bytes. The actual encoding of the output data may depend on the command being invoked, so the decoding to text will often need to be handled at the application level.
默认情况下,此函数将数据作为被编码字节返回。 输出数据的实际编码可能取决于被调用的命令,因此通常需要在应用程序级别处理对文本的解码

所以可以看到上面返回的信息中有\n \r的字符。
因此一般要对输出进行解码(decode),例如:

import subprocess
output = subprocess.check_output("p4 info", shell=True)
text = output.decode(encoding='UTF-8')
print(text)

就将会输出:
在这里插入图片描述
可以看到\n已被解码为“换行”。

使用python检查文件是否被别人checkout

注意,这里假设P4服务器已经正常连接,用户已经正常登陆。确认方法可以参考之前的博客中前两部分。
然后注意如果WorkSpace还没设置的话(比如这里的Client unknown),要使用命令SET P4CLIENT=【你的WorkSpace名字】

fstat命令

fstat命令中的otherOpen显示了是否被别人checkout:
在这里插入图片描述
因此它可以用来判断是否被checkout。
比如,可以写个脚本调用它:

import subprocess
command = "p4 fstat d:/Test/TestP4WorkSpace/test2/guaguga.txt"
output = subprocess.check_output(command, shell=True)
text = output.decode(encoding='UTF-8')
print(text)

如果一个文件没有被checkout,则会输出:
在这里插入图片描述
如果已经被人checkout了,则会输出:
在这里插入图片描述
下面就封装成一个正式的python函数来判断一个文件是否被别人checkout

封装函数

import subprocess#判断文件是否被别人checkout
def IsCheckout(FilePath):command = "p4 fstat " + FilePathoutput = subprocess.check_output(command, shell=True)text = output.decode(encoding='UTF-8')return text.count("otherOpen")>0#测试调用:
result = IsCheckout("d:/Test/TestP4WorkSpace/test2/guaguga.txt")
print(result)

运行后将会打印出

True
http://www.lryc.cn/news/2417896.html

相关文章:

  • 8Uftp连接服务器错误
  • 自学电脑编程_有哪些高质量的自学网站
  • javaSE(完整版)
  • 精进不休丨MogDB 数据库预读特性进一步提升20%+查询性能
  • 计算机期刊投稿须知
  • C语言qsort函数的使用详解
  • 2023最新个人博客文章发布系统的设计与实现(毕业设计+论文+开题报告+运行)
  • Android 游戏开发入门指南(一)
  • java Map遍历的5种方法和一些基本使用
  • Cocoa 框架概述
  • alternatives命令总结
  • PS(Photoshop)去水印的4个方法
  • MPEG音频文件格式(包括MP3文件格式)详解
  • 思科RIP路由协议介绍与实验操作步骤
  • 1.图文并茂详解Linux安装,客户端连接,xshell,虚拟机,虚拟网卡配置
  • 【统计类知识】大数定律与中心极限定理
  • 【笔记】位图(.bmp)和矢量图(Vector):位图是点阵图或光栅图,使用像素的一格一格来描述图像,放大以后每一个像素看就像是一个个的马赛克;矢量图是使用直线和曲线来描述图形,可以无限方法,不会失真
  • conan 详解
  • 什么是DI(依赖注入),依赖注入的原理
  • 数据库的索引
  • 用AVPlayer播放视频
  • 说走就走的「Windows」—— Windows To Go 制作详解
  • 算法篇-----粒子群算法
  • linux解压缩命令大全
  • html网页制作——HTML5响应式个人简历网站模板 web前端网页制作课作业
  • 项目介绍——面向对象与软件工程实验四
  • flex与bison入门,编译原理:flex编写词法分析器(使用windows环境)
  • NIVIDIA 硬解码学习2
  • 泛函分析的優勢在數值解析中:高效計算與準確度的平衡
  • 向量的点乘和叉乘