我可以通过打开我的Java程序然后使用以下Python代码与Python中的示例Java程序进行交互:
rpart_1 <- rpart(myFormula, data = kyphosis,
method = "class",
control = rpart.control(minsplit = 0, cp = 0))
plotcp(rpart_1)
printcp(rpart_1)
然而,这有一个缺点,即在使用此代码之前我必须以某种方式打开Java程序。
我发现有一个名为launch_gateway的方法对于这个目标看起来非常方便。
from py4j.java_gateway import JavaGateway
gg = JavaGateway()
sw = gg.entry_point.getInstance()
sw.run()
...
但是,如果以这种方式启动,我无法连接到我的Java程序。
我尝试使用以下代码:
py4j.java_gateway.launch_gateway(jarpath="path_to_my_jar.jar")
但是我收到以下错误:
port = py4j.java_gateway.launch_gateway(jarpath="path_to_my_jar.jar")
gp = GatewayParameters(port=port)
gg = JavaGateway(gateway_parameters=gp)
sw = gg.entry_point.getInstance()
我想我在尝试连接网关的方式上做错了。
有什么建议吗?
由于
答案 0 :(得分:4)
launch_gateway
在py4j.jar中运行网关,这对于与标准JVM交互很有用,但显然不包含自定义代码。
但是,正如您所建议的那样,classpath
参数允许您加载其他自定义Java代码。
这是一个&#34;最小的例子&#34;:
from py4j.java_gateway import JavaGateway
gg = JavaGateway.launch_gateway(classpath="/path/my_jar.jar")
myclass_instance = gg.jvm.my_class_package_name.MyClass()
result = myclass_instance.my_method()
请注意,my_jar.jar
不必启动网关。
launch_gateway
为您提供了很好的功能,例如:die_on_exit
,stdout / stdin重定向和自动端口选择。
答案 1 :(得分:1)
我发现了两个潜在的问题: