首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python SimpleXMLRPCServer返回值

Python SimpleXMLRPCServer返回值
EN

Stack Overflow用户
提问于 2015-06-29 13:53:51
回答 1查看 339关注 0票数 1

我刚刚开始使用XMLRPC服务器和客户端将我的raspberry pi连接到计算机上。

我的服务器看起来如下:

代码语言:javascript
复制
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
import numpy as np

allow_reuse_address = True   
ip = '...'
port = 8000  

class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)  

server = SimpleXMLRPCServer((ip, port), requestHandler=RequestHandler)
server.register_introspection_functions() 

def Spectrum():
    data = ... # it's a numpy array
    return data

server.register_function(Spectrum, 'Spectrum')  
server.serve_forever()

我的当事人看起来是这样的:

代码语言:javascript
复制
#!/usr/bin/env python

import xmlrpclib
import numpy as np

[...]

def getSpectrum():
try:
    s = xmlrpclib.ServerProxy(server)
    v = s.Spectrum()
    print v         

except:
    print "no data"

我的服务器正在运行,我的测试功能显示它可以工作。但是我的函数getSpectrum()总是抛出异常。我发现如果我的返回值是一个浮点数而不是一个numpy数组,它就可以工作得很好:

代码语言:javascript
复制
def Spectrum():
    data = ... # it's a numpy array
    return float(data[0][0])

我不知道出了什么问题,但我认为应该可以返回一个numpy数组。你知道怎么解决吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-29 14:46:12

xmlrpclib只支持标准python类型的编组。numpy数组是扩展类型,因此不能在框外序列化。一个简单的解决方案是返回numpy数组的列表表示,当您接收到数据时,将它再次转换为numpy数组:

代码语言:javascript
复制
def Spectrum():
    data = ... # it's a numpy array
    return data.tolist()
...
def getSpectrum():
    try:
        s = xmlrpclib.ServerProxy(server)
        v = numpy.asarray(s.Spectrum())
        ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31117521

复制
相关文章

相似问题

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