我正在编写一个简单的脚本,它将通过python同步一个perforce目录但是我无法这样做。 它不允许我通过脚本在[perforce]目录中执行任何操作。 有人可以建议我如何在该目录中运行p4登录,p4同步等命令吗?
答案 0 :(得分:4)
您应该使用它代替subprocess
,因为它允许您将p4连接视为对象并使用API对其进行操作,而不是手动解析p4命令的输出。
答案 1 :(得分:3)
运行“p4 sync”而不使用任何其他参数将同步当前客户端工作空间映射到当前目录的文件。从Python脚本运行命令时,您需要知道脚本实际运行的位置。
出于调试目的,首先尝试运行“p4 info”:它将显示当前工作目录的内容,并向您显示Perforce环境的其余详细信息。
如果您始终希望脚本同步同一目录,则无论您在何处运行它,都可以考虑指定要同步的路径。例如:
如果您是客户端工作区,用户或perforce服务器配置由P4CONFIG在目录基础上配置或由P4V设置,您可能希望将这些设置的全局选项作为全局选项添加到命令中。例如:
当您从Python运行命令时,您可能会发现P4Python脚本API使配置更容易: https://www.perforce.com/perforce/r14.2/manuals/p4script/python.programming.html
答案 2 :(得分:2)
如果P4Python超出了你想要处理的范围,Perforce Workshop中有一个Python类,它提供了用P4Python接口包装命令行。
答案 3 :(得分:1)
我使用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命令。此功能与Rev#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
这会给你一些观点,虽然它不完整。希望这有帮助
答案 4 :(得分:0)
如果您知道可以在CMD shell中运行的确切perforce命令,则可以使用os.system('cmd')。您还可以查看os.popen和subprocess.call来执行相同操作。
答案 5 :(得分:0)
有p4swamp,它也是CLI的包装器
from p4swamp import p4
result = p4('sync')
print(result)