我有一个python应用程序和Java应用程序.python应用程序为java应用程序生成输入并在命令行上调用它.
我相信必须有一个更优雅的解决方案; 就像使用JNI从Java调用C代码一样.
有什么指针吗?(仅供参考,我是Python的新手)
澄清(以长期问题为代价:道歉)py app(我不拥有)以多个配置文件的形式获取用户输入.然后它通过插件机制将这些和农场工作转移到许多(隐藏的)工具上.我希望添加对旧版Java应用程序提供的功能的支持.
因此从java应用程序调用python应用程序是没有意义的,我无法在jython环境(在JVM上)上运行py app.
由于没有明显的机制,我认为简单的CL调用是最好的解决方案.
很抱歉要重新确认该帖子,但没有接受答案......
你也可以使用Py4J.首页上有一个例子和很多文档,但实际上,你只需要从你的python代码中调用Java方法,就像它们是python方法一样:
>>> from py4j.java_gateway import JavaGateway >>> gateway = JavaGateway() # connect to the JVM >>> java_object = gateway.jvm.mypackage.MyClass() # invoke constructor >>> other_object = java_object.doThat() >>> other_object.doThis(1,'abc') >>> gateway.jvm.java.lang.System.out.println('Hello World!') # call a static method
与Jython相反,Py4J在Python VM中运行,因此它始终与最新版本的Python"最新",并且您可以使用在Jython上运行不正常的库(例如,lxml).通过套接字而不是JNI完成通信.
免责声明:我是Py4J的作者
看看Jython.它有点像JNI,但用Python代替C,即你可以用Java调用Python,反之亦然.目前还没有完全清楚你要做什么,或者为什么你现在的方法不是你想要的.
将Java代码包装在Container(Servlet/EJB)中.
所以你不要在vm-startup中浪费时间,而是要更加注重服务.
对于包装你可以使用jython(只有熟悉python才有意义)
选择python和java可以使用的通信协议:
json(见www.json.org)
rmi(Python:JPype)
休息
SOAP(仅适用于勇敢者)
选择您或您的合作伙伴所熟悉的东西!
如果您真的想在Java进程中嵌入Java应用程序,请查看JPype.它通过JNI提供对Java的访问.