如何打开签出的文件 P4 Python

How to open a checked out file P4 Python

我目前正在 Python 中使用 P4Python 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()

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 它代替)。

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

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

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