У меня есть предварительное сообщение о том, что мне нужно прикрепить строку, содержащую информацию о данных (единицы измерения, коэффициент масштабирования и т. д.). Я использую пользовательские параметры в соответствии с руководством по proto2. Я также попытался ответить на предыдущий вопрос, где они напечатали пользовательские параметры для 1 сообщения здесь. Я хотел бы распечатать все поля из сообщения рядом со строкой. Я изо всех сил пытался найти решение, до сих пор я пробовал:
В моем файле .proto: служебное сообщение содержит поля, которые сами являются сообщениями, такими как My_Message.
import "google/protobuf/descriptor.proto";
extend google.protobuf.FieldOptions {
optional string formatting_stuff = 50000;
}
message My_Message
{
optional uint32 base_frequency_hz = 1 [(formatting_stuff) = "test"];
optional float trigger_frequency_hz = 2 [(formatting_stuff) = "test2"];
...
}
message Service
{
optional My_Message x = 13;
...
}
Затем в файле python, как будет выполняться итерация по каждому полю в Service и вложенному сообщению My_Message, чтобы получить как его значение, так и затем извлечь «formatting_stuff».
Это моя попытка, но я не могу получить параметры поля для печати пользовательских параметров:
мессенджер.py
...
rsp = self.proto.Service().FromString(self.data)
desc = protobuf_file.Service.My_Message.DESCRIPTOR
for rsp_field in response.DESCRIPTOR.fields:
print("Response Field name: ", rsp_field.name)
print("Response Field value: ", getattr(rsp, rsp_field.name))
options = desc.GetOptions()
formatting = options.Extensions[protobuf_file.formatting_stuff]
print("Response Field formatting: ", formatting)
Выход терминала:
Response Field name: base_frequency_hz
Response Field value: 720000
Response Field formatting:
Response Field name: trigger_frequency_hz
Response Field value: 3000.0
Response Field formatting:
Как видите, мои настраиваемые поля не печатаются. Пожалуйста, не могли бы вы помочь мне распечатать пользовательские параметры.
С уважением