1

我目前正在使用 P4Python API 在 Python 中编写一个脚本,该 API 可以自动执行在 Perforce 中检出文件并对其进行一些更改的过程。我目前正在尝试弄清楚如何打开已签出的文件,以便我可以对其进行更改,但我无法使用“//depot”文件路径打开它。我假设我需要使用系统文件路径(C:/...),但我不确定如何继续。

## Connect to P4 server
p4.connect()

## Checkout file to default changelist
p4.run_edit("//depot/file/tree/fileToEdit.txt")

f1 = "//depot/file/tree/fileToEdit.txt" ## This file path does not work

with open(f1, 'w') as file1:
    file1.write("THIS IS A TEST")

## Disconnect from P4 server
p4.disconnect()
4

2 回答 2

2

Python的open函数对本地文件进行操作,没有depot路径的概念,所以如你所说,需要使用workspace路径。方便的是,它作为p4 edit输出的一部分返回,因此您可以从那里获取它:

from P4 import P4

p4 = P4()

## Connect to P4 server
p4.connect()

## Checkout file to default changelist
local_paths = [
    result['clientFile'] 
    for result in p4.run_edit("//depot/file/tree/fileToEdit.txt")
]

for path in local_paths:
    with open(path, 'w') as f:
        f.write("THIS IS A TEST")

## Disconnect from P4 server
p4.disconnect()

请注意,这个简单的脚本在p4 edit命令没有打开文件的情况下不起作用,例如,如果文件没有同步(在这种情况下,您的脚本可能想要p4 sync它),或者文件已经打开(其中在这种情况下,您可能只是想从中获取本地路径p4 opened并对其进行修改——或者您可能想先恢复现有的更改,或者什么都不做),或者文件不存在(在这种情况下,您可能想要代替p4 add它)。

于 2020-09-18T18:27:00.453 回答
0

以下代码为我提供了本地文件路径:

result = p4.run_fstat("//depot/file/tree/fileToEdit.txt")[0]['clientFile']
print(result)

使用 p4.run_fstat("//depot/filename") 将提供所有必要的信息,附加的 "[0]['clientFile']" 用于拉取本地文件路径。

于 2020-09-23T20:58:30.180 回答