如何从CPython调用Java对象和函数?
问题内容:
我有一个在CPython实现上运行的python程序,并且在其中必须调用在Java程序中定义的函数。我怎样才能做到这一点?
能够使用一些Java对象也将是一件很棒的事。
Jython不是一个选择。我必须在CPython中运行python部分。
问题答案:
最简单的事情是
- 为您的Java“函数”编写一个简单的CLI。(没有这样的东西,所以我假设您实际上是指Java类的方法功能。)
public class ExposeAMethod {
public static void main( String args[] ) {
TheClassToExpose x = new TheClassToExpose();
x.theFunction();
}
}
-
以此为入口编译并构建可执行的JAR文件。称它为
ExposeAMethod.jar
-
从子流程创建的命令中调用它。
import subprocess
p = subprocess.Popen("java -jar ExposeAMethod.jar", shell=True)
sts = os.waitpid(p.pid, 0)
这是最低要求。而且确实不多。我数了6行Java,3行Python,您就可以运行了。
如果要将参数传递给此Java类构造函数或方法函数,则必须再编写几行代码。您有两种选择。
-
从stdin读取参数,将结果写入stdout。这是相对容易的,并且性能非常好。
-
将参数解析为Java的命令行选项,然后将结果写入stdout。这有点困难,但概括性很好。好处是,您现在拥有一个可以重复使用的有用的命令行Java程序。