Как проанализировать двоичный вывод Perforce «мариновать»?

StackOverflow https://stackoverflow.com/questions/1712026

  •  19-09-2019
  •  | 
  •  

Вопрос

В командной строке Perforce есть специальный ключ -G, который предположительно делает вывод машиночитаемым с использованием формата сериализации python «pickle».Так ли это на самом деле в целом?

Например, рассмотрим вывод p4 -G diff -duw3 <file1> <file2> <file3>.Насколько я могу судить, вывод представляет собой последовательность:маринованный, необработанный дифференциал, маринованный, необработанный дифференциал, маринованный, необработанный дифференциал.Похоже, что он не содержит каких-либо разделителей, которые позволили бы надежно определить границы выбора/различия.

Я что-то упустил или этот «машиночитаемый» формат на самом деле не машиночитаем?Как я могу найти границы между солеными огурцами и необработанными различиями в его выводе?

Это было полезно?

Решение

p4 -G выводит свои данные в marshalготовая форма не маринованная.

Но ты прав - p4 -G diff -duw3 тоже не разобьюсьmarshal, так что я думаю, что здесь есть проблема.

p4 -G opened хотя демаршалирует нормально.Однако любой вид 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] )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top