使用jython使用来自Java的参数运行python函数

时间:2019-02-11 16:35:15

标签: java python jython jython-2.7

我想通过使用jython从我的java中执行一个位于我的python项目中的Python函数。 https://smartbear.com/blog/test-and-monitor/embedding-jython-in-java-applications/为此提供了示例代码。但是在我的情况下,我遇到以下异常。

  

线程“主”回溯中的异常(最近一次调用最近):文件   ImportError:第1行中的“”,未命名模块   JythonTestModule

我的情况如下。

  1. 我已使用PyCharm(JythonTestModule.py)在python项目(pythonDev)中创建了一个python模块,该模块包含以下功能。

    def平方(值): 返回值*值

  2. 然后我在Java项目(javaDev)中创建了一个示例Java类,并调用了python模块。

    public static void main(String[] args) throws PyException{
       PythonInterpreter pi = new PythonInterpreter();
       pi.exec("from JythonTestModule import square");
       pi.set("integer", new PyInteger(42));
       pi.exec("result = square(integer)");
       pi.exec("print(result)");
       PyInteger result = (PyInteger)pi.get("result");
       System.out.println("result: "+ result.asInt());
       PyFunction pf = (PyFunction)pi.get("square");
       System.out.println(pf.__call__(new PyInteger(5)));
    }     
    

    运行此java方法后,上述异常由Java程序生成。我想知道这个代码段有什么问题。

1 个答案:

答案 0 :(得分:1)

根据该问题上面评论部分的建议,我为我的问题制定了解决方案。以下代码段将演示这一点。在此解决方案中,我将 python.path 设置为模块文件的目录路径。

public static void main(String[] args) throws PyException{
       Properties properties = new Properties();
       properties.setProperty("python.path", "/path/to/the/module/directory");
       PythonInterpreter.initialize(System.getProperties(), properties, new String[]{""});
       PythonInterpreter pi = new PythonInterpreter();
       pi.exec("from JythonTestModule import square");
       pi.set("integer", new PyInteger(42));
       pi.exec("result = square(integer)");
       pi.exec("print(result)");
       PyInteger result = (PyInteger)pi.get("result");
       System.out.println("result: "+ result.asInt());
       PyFunction pf = (PyFunction)pi.get("square");
       System.out.println(pf.__call__(new PyInteger(5)));
    }

如果您要使用Jython中的多个模块,请在其中添加 python.path 作为所有模块的父目录路径以便检测所有模块。