[英]execute perforce commands through python
我正在编写一个简单的脚本,该脚本将通过python同步一个perforce目录,但是我不能这样做。 它不允许我通过脚本在该[perforce]目录中执行任何操作。 有人可以建议我如何在该目录中运行p4登录,p4同步之类的命令吗?
有一个正式支持的perforce python API 。
您应该使用它而不是subprocess
因为它允许您将p4连接视为一个对象并使用API对其进行操作,而不是手动解析p4命令的输出。
不带任何其他参数运行“ p4 sync”将同步当前客户端工作空间映射到当前目录的文件。 从Python脚本运行命令时,您需要知道脚本在何处实际运行。
为了进行调试,请首先尝试运行“ p4 info”:它将显示当前工作目录是什么,并向您显示Perforce环境的其余细节。
如果始终希望脚本同步同一目录,则无论在何处运行它,都可能需要考虑指定要同步的路径。 例如:
如果您是客户端工作空间,则用户或perforce服务器配置是由P4CONFIG在目录基础上配置的,或者是由P4V设置的,则可能需要将这些设置的全局选项作为全局选项添加到命令中。 例如:
从Python运行命令时,您可能会发现P4Python脚本API使配置更容易: https ://www.perforce.com/perforce/r14.2/manuals/p4script/python.programming.html
如果P4Python超出了您想要处理的范围,那么Perforce Workshop中将提供一个Python类,该类提供了用P4Python接口包装命令行的方法。
我使用ActiveState Python 2.7和P4Python插件从Python运行Perforce命令取得了成功。 您将需要一个p4定义行,如下所示:
p4Params = {'Port': "perforce_server_name:1666", \
'Pass': "mypassword", \
'User': "myname", \
'Client': "myclient"}
另外,您将需要P4和P4Exception库:
from P4 import P4,P4Exception
有了它,您就可以使用以下结构执行几乎所有的Perforce命令。 此功能同步到版本0,以从某个软件仓库位置“ depotPath”中删除所有受控文件:
def removeWorkFiles(depotPath,p4Params):
"""Tell Perforce to remove the version files from the workspace"""
p4 = P4(client=p4Params['Client'], port=p4Params['Port'], password=p4Params['Pass'])
p4.user = p4Params['perfUser']
try:
p4.connect() # Connect to the Perforce Server
p4.run_login()
deletePath = depotPath + "#0"
p4.run("sync", "-f", deletePath) # force to version "0", ie remove from workspace
p4.disconnect()
except P4Exception:
for e in p4.errors: # Display errors
logging.error( e)
我强烈建议您在以下位置阅读Perforce的P4 Python帮助页面:
https://www.perforce.com/perforce/r14.2/manuals/p4script/python.programming.html
尽管还不完整,但这会给您一些视角。 希望这可以帮助
如果您知道可以在CMD Shell中运行的确切的perforce命令,则可以使用os.system('cmd')。 您还可以看看os.popen和subprocess.call做同样的事情。
有p4swamp,它也是CLI的包装
from p4swamp import p4
result = p4('sync')
print(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.