如何使用protobuf在python中设置oneof字段值

时间:2019-07-25 23:58:06

标签: python proto

我有一个带一个字段的protobuf。 “ Oneof”采用字段值之一还是全部取值?不知道是否有办法设置它。

当我运行"pb2.HasField('signal')

时,我期望一个真实的值

原始文件:

message Log {
  string id = 1;       
  Severity severity = 2; 
  string Uid = 3;        
oneof signal{
    GPS gps_log = 1;
    Ignition ignition_log = 2;
  }
enum Severity {
    info = 0;
    critical = 1
}
message GPS{
  EventType event_type = 1;
enum EventType {
    ON = 0;
    OFF = 1;
  }
}

message Ignition{
  EventType event_type = 1;
enum EventType {
    ON = 0;
    OFF = 1;
  }
}

因此,在python中导入pb2之后,如何设置“信号”的值。 当我尝试时:

message=pb2.Log()
res = message.DESCRIPTOR.fields
res = [field.name for field in message.DESCRIPTOR.fields]
The o/p is ['id','severity','Uid','gps_log','ignition']  - All the fields.

如何强制“ Oneof”字段仅包含消息中的一个,例如GPS。 pb2.WhichOneof('signal')也不返回任何值(空)。 我什至不确定,是否有可能。

1 个答案:

答案 0 :(得分:0)

好像我缺少protobuf主文件,该文件是我想要的信息。字段值在prot_master文件中指定。