Java 如何使用pyro调用以对象为参数的python
我已经设置了一个小的测试java应用程序,它在启动pyro服务器(python)后调用python脚本。它工作得很好,但现在我想将一个对象作为参数传递给python类的方法。我从python方面得到一个例外,它说:Java 如何使用pyro调用以对象为参数的python,java,python,pyro,Java,Python,Pyro,我已经设置了一个小的测试java应用程序,它在启动pyro服务器(python)后调用python脚本。它工作得很好,但现在我想将一个对象作为参数传递给python类的方法。我从python方面得到一个例外,它说: Pyro4.errors.SerializeError: unsupported serialized class: com.test.pyro4.TestLog 根据pyros文档,一个类将在python中转换为dict,但我甚至不能做到这一点 java代码: NameSe
Pyro4.errors.SerializeError: unsupported serialized class:
com.test.pyro4.TestLog
根据pyros文档,一个类将在python中转换为dict,但我甚至不能做到这一点
java代码:
NameServerProxy ns = NameServerProxy.locateNS("localhost");
PyroProxy remotePluginObject = new PyroProxy(ns.lookup("plugin"));
int length = 5;
double[] values = new double[] { 0.5, 0.3, 0.6, 05, 0.4 };
double a = 6.94;
double b = 2.17;
remoteObject = new PyroProxy(ns.lookup("test.object"));
remoteObject.call("setValues", values, length);
Object result = remoteObject.call("calculate", remoteObject, a, b);
System.out.println(result.toString());
remotePluginObject.close();
remoteObject.close();
ns.close();
python服务器代码:
class TestObject(object):
values=[]
length=0
def setValues(self, valuesArray, lengthValue):
values=valuesArray
length=lengthValue
class Plugin(object):
def calculate(self, obj, a, b):
result = example.calculate(obj, a, b)
return result
plugin=Plugin()
obj=TestObject()
daemon=Pyro4.Daemon()
ns=Pyro4.locateNS()
pluginURI=daemon.register(plugin)
ns.register("plugin", pluginURI)
objURI=daemon.register(obj)
ns.register("test.object", objURI)
daemon.requestLoop()
尝试将序列化程序设置为pickle:
Pyro4.config.SERIALIZER = 'pickle'
请注意,这已经发生了
在Java中:
Config.SERIALIZER = Config.SerializerType.pickle;
同样的错误,这需要一个确定的地方吗?我在打印URI之前添加了它,将它放在第一行,然后重新开始所有操作。我现在收到一个错误,该错误太长,无法粘贴,但在一行上显示:Pyro4.errors.SerializeError:消息使用了序列化程序,但不被接受:4。这发生在启动服务器时,而不是在尝试从javachecking配置调用方法时。它接受的序列化程序是serpent、marshal和json。它目前正在使用serpent,这也是它在java端应该做的事情,因为我的类路径上有一个jar,它向序列化程序集添加了pickle,并在上面进行了尝试,但仍然得到相同的错误代码,已经更新以显示它现在的工作方式。对象在python端创建,然后通过java端的代理请求它,设置值,然后用于调用python方法。上面的代码不起作用。获取以下错误:TypeError:“float”对象不可编辑。我已经去掉了python调用中的所有参数,只留下了对象,它似乎就是这样的?