在python中动态生成protobufrpc命令列表

2024-09-24 00:28:01 发布

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

你能给我一个建议吗,在python中如何获得可能的grpc调用(以及调用中使用的对象)的列表?在

更确切地说,假设我有一个原型:

service MyService {
rpc Command1(Command1Request) returns (Command1Response);
rpc Command2(Command2Request) returns (Command2Response);
...
rpc CommandX(CommandXRequest) returns (CommandXResponse);
}
message Command1Request {
    uint64 param1 = 2;
}

我想要的是使用控制台工具生成protobuf。我有argparse,希望能够为我的实用程序动态生成命令列表:

^{pr2}$

现在我使用dir()方法来获取对象列表,因此修复了protobuf的特殊命名约定:如果我有“Command2Response”,我的调用对象是“Command2Request”,invoke请求的方法是“Command2”。在

有没有更正确的方法来获取可能调用的列表(命名约定太容易出现人为错误)?在


Tags: 对象方法列表grpcservicerpc原型命名
3条回答

假设这个protobuf生成的python代码是实用工具的一部分,那么可以通过protobuf描述符获得.proto文件中定义的所有类型信息。例如: https://github.com/google/protobuf/blob/master/python/google/protobuf/internal/descriptor_test.py#L635

在你的情况下,它会是这样的:

service_descriptor = your_proto_pb2.DESCRIPTOR.services_by_name['MyService']

一旦您有了服务描述符,您就可以获得在这个服务中定义的rpc方法的列表,这些方法中使用的请求/响应类型等等。参见: https://github.com/google/protobuf/blob/master/python/google/protobuf/descriptor.py#L748

你在寻找Python服务器中的映像吗?在

https://github.com/grpc/grpc/blob/master/doc/server-reflection.md

相关问题 更多 >