1

有谁知道如何grep()在 P4Python 中使用命令?
我正在开发一个与 Perforce 一起运行的脚本,它使我可以轻松地在多个文件中搜索特定文本

我已经尝试使用 P4 命令在 Perforce > 工具 > 管理自定义工具中创建一个工具,p4 grep -n -B 1 -e text_searched %D但由于我想在多个文件中进行相同的搜索,所以它不起作用。

我在P4 grep 文档P4Python APIs for Scripting中进行了搜索,但找不到如何执行此操作。

我注意到您可以使用一些命令run_commandName,例如:

from P4 import sys, P4, P4Exception
    p4 = P4()
    p4.run_integrated(fileName)

而且效果非常好!但我不能使用P4().run_grep()=/

所以,我想做的是制作一个 P4Python 脚本。在 Perfoce 上,我做了一个这样的自定义收费:

参数:C:\Users\hmunguba\Projects\P4\scripts\searchp4pythonscript.py $u $p $c %D

我的代码是这样的:

from P4 import sys, P4, P4Exception

p4 = P4()
p4.user = sys.argv[1]
p4.port = sys.argv[2]
p4.client = sys.argv[3]

p4.connect()

FILE = str(sys.argv[4])
SEARCH_TEXT = sys.argv[5]

try:
    p4.run("grep", "-e ", SEARCH_TEXT, FILE)
except P4Exception:
    for e in p4.errors:
        print e
finally:
    p4.disconnect()

但我从中得到的答案总是一个空白屏幕。有人可以帮我吗?

4

2 回答 2

0

对于这个问题,你可能会错过像'...'这样的后缀;例如,p4 grep -e test //path/to/folder/...表示//path/to/folder递归搜索;并且 `p4 grep -e test //path/to/folder/*' 表示在文件夹中搜索。

如果您的文件夹很大,可能会引发过多的修订错误;需要用来p4 dirs获取子文件夹并搜索//path/to/folder/{foreach sub folder}/...//path/to/folder/*

建议p4直接使用命令而不是 p4python。有时,某些行太长,p4python 只会引发异常;但是 p4 命令可以打印出其他结果项并将错误消息打印到 stderr。

于 2021-12-10T13:01:10.610 回答
0

不要期望p4.run()打印到STDOUT. 这是一个 API 调用 - 捕获其返回值(结构化数据)并进行处理。

我相信按照 API 的约定,您应该能够p4.run("grep", ARGS)使用p4.run_grep(ARGS). 如果它不起作用,它可能是一个错误。请在您设法使脚本正常工作后重新检查是否确实如此。

于 2016-06-21T08:29:16.690 回答