Мой коллега сериализовал файл protobuff на основе следующей схемы:
syntax = "proto3";
import "timestamp.proto";
message PSessionLogs {
// from Root proto
int32 EntityType = 1;
string SessionID = 2;
repeated PSessionLogsDetail LogDetail = 3;
}
message PSessionLogsDetail {
google.protobuf.Timestamp DataTimestamp = 1;
// Sensory data
int32 Sens1 = 2;
int32 Sens2 = 3;
int32 Sens3 = 4;
}
По сути, сообщение имеет заголовок (EntityType и SessionID), после чего начинается регистрация, когда 3 датчика непрерывно отправляют сообщение журнала с отметкой времени. Перед сериализацией каждого измерения датчика он создает структуру с отметкой времени и данными трех датчиков. Мы хотим десериализовать этот файл журнала в Python, где у нас есть заголовок, а затем элемент LogDetail с метками времени и данными датчиков.
Я попытался сгенерировать файл .py из .proto файла с proto c и используйте этот .py следующим образом:
import PSessionLogs_pb2
with open('$PROTOBUF_LOG_FILENAME$', 'rb') as f:
read_metric = PSessionLogs_pb2.PSessionLogs()
read_metric.ParseFromString(f.read())
Это дает мне
"DecodeError: усеченное сообщение."
Похоже, что журнал также перезаписывает значение EntityType значением метки времени.
Есть идеи, что я делаю неправильно?