首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取python中已注册的gRPC服务名称和方法的列表

获取python中已注册的gRPC服务名称和方法的列表
EN

Stack Overflow用户
提问于 2020-08-28 05:38:07
回答 1查看 1K关注 0票数 1

grpc-core for java可以选择从grpc服务器对象获取服务描述符的列表。我们可以从中收集服务名称和方法名称。

代码语言:javascript
运行
复制
    for (ServerServiceDefinition serverServiceDefinition: server.getServices()) {
        ServiceDescriptor serviceDescriptor = serverServiceDefinition.getServiceDescriptor();
        Collection<MethodDescriptor<?, ?>> methods = serviceDescriptor.getMethods();
        LOG.info("Service Name: {}", serviceDescriptor.getName());
        for (MethodDescriptor<?, ?> methodDescriptor : methods) {
            LOG.info("\t{}", methodDescriptor.getFullMethodName());
        }
    }

我希望在python中实现类似的东西,但并不明显。理想情况下,我不想求助于反射,也不想破解生成的protobuf python文件。

一种方法是从protobuf文件中获取信息,但这需要更多的手动工作:

代码语言:javascript
运行
复制
    import service_pb2

    a = service_pb2._<service_name>
    print(a.name)
    for m in a.methods:
        print(f'\t{m.name}')

而且,通过服务器对象本身获取已注册的服务会更有意义。

例如,我希望能够输出所有已注册的服务和与应用程序关联的服务方法。

代码语言:javascript
运行
复制
Server Name: ServiceName1
    serviceMethod1
    serviceMethod2
    serviceMethod3
    serviceMethod4
Server Name: ServiceName2
    serviceMethod1
    serviceMethod2
    serviceMethod3
Server Name: ServiceName3
    serviceMethod1
    serviceMethod2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-03 14:52:37

如果我正确理解了您的需求,下面的代码片段可能会对您有所帮助。

代码语言:javascript
运行
复制
# server is the configured grpc server object.

for service in server._state.generic_handlers:
    print("Service Name:", service.service_name())
    for method in service._method_handlers:
        print(4*" " + method)

如果您不想要该方法的全名,请使用以下代码:

代码语言:javascript
运行
复制
method.split('/')[-1]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63624473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档