【问题标题】:Dynamically generate list of protobuf rpc commands in python在python中动态生成protobuf rpc命令列表
【发布时间】:2018-08-05 15:02:57
【问题描述】:

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

更准确地说,假设我有一个 protobuf:

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

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

my_utility --Command1 --param1 <value>
my_utility --Command2 --param2 <value>
... 

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

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

【问题讨论】:

    标签: python protocol-buffers grpc


    【解决方案1】:

    看起来您正在寻找 gRPC Python 中的服务器反射?

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

    【讨论】:

      【解决方案2】:
      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 2020-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多