如何获取python3中protobuf的RepeatedCompositeContainer或RepeatedScalarContainer包含的类型?

2024-06-25 23:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python应用程序,用于序列化和发送protobuf3消息。我想做一些交互式用户界面,允许选择一个消息,并分配它的动态。我有一个相当大的消息集,因此我不想为每个消息都创建一个get函数,而是创建一个可以处理所有消息的函数。在

对于get所有的消息字段,我可以简单地获取消息的所有属性并选择那些是其字段的属性,这很简单。然后,为了知道属性的类型,我使用type(getattr(my_message, current_field))。现在问题来了。假设这些是我的留言:

message myMess1 {
    //some fields
}

message myMess2 {
    string some_string = 1
    repeated myMess1 myMess1Field = 2
}

现在,分配一些字符串字段没有问题。在

type(getattr(myMess2Instance, someStringFieldName))返回string,所以我知道用字符串来填充它。在

但是如何处理重复的myMess1字段? type(getattr(MyMess2Instance, myMess1FieldName))实际上返回google.protobuf.pyext._message.RepeatedCompositeContainer,它没有说明其中包含什么类型。我怎样才能得到它?在


Tags: 函数字符串应用程序消息类型messagegetstring
1条回答
网友
1楼 · 发布于 2024-06-25 23:45:04

我有一个类似的Protobuf解析问题,这里是我所做的“希望它有帮助”:

假设我们收到以下响应消息:

>>> msg
path {
}
path {
  value: "Arts & Entertainment"
}
path {
  value: "Comics & Animation"
}

将其转换为字典:

^{pr2}$

将值的字典列表作为字符串联接:

^{3}$

相关问题 更多 >