我想在python中编写一些脚本,对源代码进行一些自动更改.如果脚本确定需要更改文件,我想首先将其从perforce中检出.我不关心办理登机手续,因为我总是想先建立和测试.
Perforce有围绕其C/C++工具的Python包装器,可用于Windows的二进制形式,以及其他平台的源:
http://www.perforce.com/perforce/loadsupp.html#api
您会发现他们的脚本API文档很有帮助:
http://www.perforce.com/perforce/doc.current/manuals/p4script/p4script.pdf
使用Python API与命令行客户端非常相似:
PythonWin 2.5.1 (r251:54863, May 1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on win32. Portions Copyright 1994-2006 Mark Hammond - see 'Help/About PythonWin' for further copyright information. >>> import P4 >>> p4 = P4.P4() >>> p4.connect() # connect to the default server, with the default clientspec >>> desc = {"Description": "My new changelist description", ... "Change": "new" ... } >>> p4.input = desc >>> p4.run("changelist", "-i") ['Change 2579505 created.'] >>>
我将从命令行验证它:
P:\>p4 changelist -o 2579505 # A Perforce Change Specification. # # Change: The change number. 'new' on a new changelist. # Date: The date this specification was last modified. # Client: The client on which the changelist was created. Read-only. # User: The user who created the changelist. # Status: Either 'pending' or 'submitted'. Read-only. # Description: Comments about the changelist. Required. # Jobs: What opened jobs are to be closed by this changelist. # You may delete jobs from this list. (New changelists only.) # Files: What opened files from the default changelist are to be added # to this changelist. You may delete files from this list. # (New changelists only.) Change: 2579505 Date: 2008/10/08 13:57:02 Client: MYCOMPUTER-DT User: myusername Status: pending Description: My new changelist description
这是我想出的:
import os def CreateNewChangeList(description): "Create a new changelist and returns the changelist number as a string" p4in, p4out = os.popen2("p4 changelist -i") p4in.write("change: new\n") p4in.write("description: " + description) p4in.close() changelist = p4out.readline().split()[1] return changelist def OpenFileForEdit(file, changelist = ""): "Open a file for edit, if a changelist is passed in then open it in that list" cmd = "p4 edit " if changelist: cmd += " -c " + changelist + " " ret = os.popen(cmd + file).readline().strip() if not ret.endswith("opened for edit"): print "Couldn't open", file, "for edit:" print ret raise ValueError