python protobuf 无法反序列化消息
python protobuf can't deserialize message
protobuf 入门 python 我遇到一个奇怪的问题:
一个简单的消息原型定义是:
syntax = "proto3";
package test;
message Message {
string message = 1;
string sender = 2;
}
通过 protoc -I . --python_out=generated message.proto
生成并在 Python 中访问,例如:
from generated.message_pb2 import Message
然后我可以构建消息
m = Message()
m.sender = 'foo'
m.message = 'bar'
print(str(m))
但反序列化不会return结果
s_m = m.SerializeToString()
print(s_m) # prints fine
a = m.ParseFromString(s_m)
a.foo #fails with error - no attributes deserialized
而不是
a = m.ParseFromString(s_m)
a.foo
这样做
a = m.FromString(s_m)
print a.sender
或者你可以这样做
m2 = Message()
m2.ParseFromString(s_m)
print m2.sender
不同之处在于 FromString
returns 从字符串中反序列化一个新对象,而 ParseFromString
解析字符串并在对象上设置字段。
protobuf 入门 python 我遇到一个奇怪的问题:
一个简单的消息原型定义是:
syntax = "proto3";
package test;
message Message {
string message = 1;
string sender = 2;
}
通过 protoc -I . --python_out=generated message.proto
生成并在 Python 中访问,例如:
from generated.message_pb2 import Message
然后我可以构建消息
m = Message()
m.sender = 'foo'
m.message = 'bar'
print(str(m))
但反序列化不会return结果
s_m = m.SerializeToString()
print(s_m) # prints fine
a = m.ParseFromString(s_m)
a.foo #fails with error - no attributes deserialized
而不是
a = m.ParseFromString(s_m)
a.foo
这样做
a = m.FromString(s_m)
print a.sender
或者你可以这样做
m2 = Message()
m2.ParseFromString(s_m)
print m2.sender
不同之处在于 FromString
returns 从字符串中反序列化一个新对象,而 ParseFromString
解析字符串并在对象上设置字段。