【问题标题】:How do I dynamically inflate a protobuf object in python?如何在 python 中动态扩展 protobuf 对象?
【发布时间】:2017-10-12 05:35:09
【问题描述】:

我正在访问一个提供 1) protobuf 架构和 2) 给定 protobuf 消息的二进制数据的 Web 服务。 protobuf 架构以 ZIP 格式检索,并包含一个 .proto 文件,大致定义为:

message FooMessage {
  //stuff
  ... 
}

//other .proto fun... 

获取 .proto 文件后,我会对其进行编译:

protoc --python_out=. path/to/message

然后我导入模块:

module = importlib.import_module(libName, package=pkg)

下一步是获取给定对象的二进制数据。我这样做并将其存储为data = io.BytesIO 对象。

所以现在我想用我在 .proto 文件中定义的获取的二进制数据来扩充 FooMessage 对象,ala:

obj = module.FooMessage(data) 

问题:

  1. 如何从module 中检索FooMessage 类名 我已导入以便动态构建对象?
  2. 即使我“作弊”并查看单个 .proto 文件的编译代码,我也看不到传递二进制数据以膨胀 FooMessage_pb2.py 对象的明显方法。似乎没有一种方法可以接收二进制数据来实例化对象 ala:obj = module.FooMessage(data)

显然,我正在以错误的方式做/思考这个问题。我将非常感谢您的帮助。

【问题讨论】:

  • 不确定你在问什么。你有模式,你有符合这些模式的数据。有什么问题?
  • 我获取了一个 .proto 文件,我将其编译成一个 _pb2.py 类。
  • 忽略该评论。为了清楚起见,我编辑了问题。

标签: python protocol-buffers


【解决方案1】:

对于#1,它们在模式中包含类名。我只是错过了。

好吧,对于#2,我只需要使用module.FooMessage.FromString(data) 方法,这在文档中并不是很明显。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多