如何从CPython调用Java对象和函数?


问题内容

我有一个在CPython实现上运行的python程序,并且在其中必须调用在Java程序中定义的函数。我怎样才能做到这一点?

能够使用一些Java对象也将是一件很棒的事。

Jython不是一个选择。我必须在CPython中运行python部分。


问题答案:

最简单的事情是

  1. 为您的Java“函数”编写一个简单的CLI。(没有这样的东西,所以我假设您实际上是指Java类的方法功能。)
        public class ExposeAMethod {
        public static void main( String args[] ) {
             TheClassToExpose  x = new TheClassToExpose();
            x.theFunction();
        }
    }
  1. 以此为入口编译并构建可执行的JAR文件。称它为 ExposeAMethod.jar

  2. 从子流程创建的命令中调用它。

        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程序。