pickle - 如何解析 Perforce "pickle"二进制输出?

标签 pickle perforce

Perforce 命令行有一个特殊的开关 -G,据说可以使用 python 的“pickle”序列化格式使其输出成为机器可读的。一般来说,情况确实如此吗?

例如,考虑 p4 -G diff -duw3 <file1> <file2> <file3> 的输出。据我所知,输出是一个序列:pickle、raw diff、pickle、raw diff、pickle、raw diff。它似乎不包含任何可以使人可靠地定位 pickle/diff 边界的分隔符。

我是否遗漏了某些内容,或者这种“机器可读”格式实际上不是机器可读的?如何在其输出中找到 pickle 和原始差异之间的边界?

最佳答案

p4 -G 以未经过 pickle 的 marshaled 形式输出其数据。

但是你是对的 - p4 -G diff -duw3 也不会取消marshal,所以我猜那里有问题。

p4 -G opening 解码很好。但是任何类型的 diff 都会失败。

以下是相关知识库文章:http://kb.perforce.com/ToolsScripts/PerforceUtilities/UsingP4G

#!/usr/bin/env python
import marshal
import subprocess

# proc = subprocess.Popen(["p4","-G","diff","-duw3","configure.ac","Makefile.am"],stdout=subprocess.PIPE)
proc = subprocess.Popen(["p4","-G","diff"],stdout=subprocess.PIPE)
# proc = subprocess.Popen(["p4","-G","opened"],stdout=subprocess.PIPE)
pipe = proc.stdout
output = []
try:
    while 1:
        record = marshal.load(pipe)
        output.append(record)
except EOFError:
    pass
pipe.close()
proc.wait()

# print list of dictionary records
c = 0
for dict in output:
    c = c + 1
    print "\n--%d--" % c
    for key in dict.keys():
        print "%s: %s" % ( key, dict[key] )

关于pickle - 如何解析 Perforce "pickle"二进制输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712026/

相关文章:

python - python 中的 Pickle 和 exec

python - 在 R 中加载 pickle

python - 用 lambda pickle defaultdict

msbuild - Perforce 作为 w2k3x64 上的集成和构建服务器?

python - 在 Windows 上安装 P4Python 时出错

javascript - P4认证问题

python - 如何将 python 对象 pickle 到 csv 文件中?

python - Python 3.7 中的 Pickle 重大变化

git - 将现有的 Git 存储库与 Perforce (P4) 集成

svn - 与 Perforce 的同步/解析过程等价的 svn 是什么?