通过打开Java程序,然后使用以下Python代码,我能够用Python与示例Java程序进行交互:
from py4j.java_gateway import JavaGateway
gg = JavaGateway()
sw = gg.entry_point.getInstance()
sw.run()
...但是,这有一个缺点,在使用此代码之前,我必须以某种方式打开Java程序。
我发现有一种叫做launch_gateway的方法,它似乎非常方便地达到了这个目的。
py4j.java_gateway.launch_gateway(jarpath="path_to_my_jar.jar")但是,如果以这种方式启动,我将无法连接到我的Java程序。
我尝试使用以下代码:
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()但我得到了以下错误:
An error occurred while calling t.getInstance. Trace:
py4j.Py4JException: Target Object ID does not exist for this gateway :t我想我在尝试连接到网关时做错了什么。
有什么建议吗?
谢谢
发布于 2017-03-17 21:48:29
巴斯密,你说得对!一开始我误解了这是怎么回事。
launch_gateway在py4j.jar中运行网关,这对于与标准JVM交互很有用,但显然不包含自定义代码。
但是,正如您所建议的,classpath参数允许您加载额外的自定义Java代码。
这是一个“最低限度的例子”:
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重定向和自动端口选择。
发布于 2017-03-17 07:52:28
我看到两个潜在的问题:
https://stackoverflow.com/questions/42826221
复制相似问题