学习使用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 " + FilePath
    output = 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值