如何访问未知字段 - python protobuf

时间:2015-10-01 21:51:56

标签: python protocol-buffers

我正在处理大量具有相似但不完全相同结构的消息类型。这些中常见的所有东西都在另一个消息中。当收到消息时,我使用公共消息类型解析它。但是,我似乎无法找到一种方法来访问此类型之外的字段(即非公共字段)。有没有办法访问python中设置的未知字段?

修改 我刚刚在文档中看到了这一点:

" 如果消息包含未知字段,则当前Java和C ++实现在按顺序排序的已知字段之后以任意顺序写入它们。当前的Python实现不会跟踪未知字段。"

这是否意味着如果我使用常见类型解析,例如:

proto = msg_pb2.Common() proto.ParseFromString(raw_msg)

消息Common中未定义的任何字段都被丢弃了?

1 个答案:

答案 0 :(得分:0)

对于寻找答案的人,reflection模块帮助了我: ideone

相关示例代码:

样本用法:

file_descriptor = descriptor_pb2.FileDescriptorProto()
file_descriptor.ParseFromString(proto2_string)   
msg_descriptor = descriptor.MakeDescriptor(file_descriptor.message_type[0])
msg_class = reflection.MakeClass(msg_descriptor)
msg = msg_class()

Args:
   descriptor: A descriptor.Descriptor object describing the protobuf.
Returns:
   The Message class object described by the descriptor.