繁体   English   中英

通过python执行perforce命令

[英]execute perforce commands through python

我正在编写一个简单的脚本,该脚本将通过python同步一个perforce目录,但是我不能这样做。 它不允许我通过脚本在该[perforce]目录中执行任何操作。 有人可以建议我如何在该目录中运行p4登录,p4同步之类的命令吗?

有一个正式支持的perforce python API

您应该使用它而不是subprocess因为它允许您将p4连接视为一个对象并使用API​​对其进行操作,而不是手动解析p4命令的输出。

不带任何其他参数运行“ p4 sync”将同步当前客户端工作空间映射到当前目录的文件。 从Python脚本运行命令时,您需要知道脚本在何处实际运行。

为了进行调试,请首先尝试运行“ p4 info”:它将显示当前工作目录是什么,并向您显示Perforce环境的其余细节。

如果始终希望脚本同步同一目录,则无论在何处运行它,都可能需要考虑指定要同步的路径。 例如:

  • 库语法:p4 sync //库/路径/到/目录/ ...
  • 本地语法(Windows):p4同步c:\\ users \\ user \\ path \\ to \\ dir ...
  • 本地语法(* nix):p4 sync / home / user / path / to / dir / ...

如果您是客户端工作空间,则用户或perforce服务器配置是由P4CONFIG在目录基础上配置的,或者是由P4V设置的,则可能需要将这些设置的全局选项作为全局选项添加到命令中。 例如:

  • p4 -p服务器:1666 -c client_ws -u用户同步// depot / path / to / dir / ...

从Python运行命令时,您可能会发现P4Python脚本API使配置更容易: https ://www.perforce.com/perforce/r14.2/manuals/p4script/python.programming.html

如果P4Python超出了您想要处理的范围,那么Perforce Workshop中将提供一个Python类,该类提供了用P4Python接口包装命令行的方法。

适用于Python的P4Python风格的CLI包装器

我使用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.popensubprocess.call做同样的事情。

有p4swamp,它也是CLI的包装

from p4swamp import p4

result = p4('sync')
print(result)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM