编程语言
首页 > 编程语言> > 无法从Java运行简单的Jython脚本

无法从Java运行简单的Jython脚本

作者:互联网

我正在做一个大型Java项目,其中的Jython脚本是从Java代码中解释的.由于我尚未弄清楚的原因,除非函数,类,变量都声明为全局,否则Jython脚本中不会起作用.
为了找出这个问题,我将问题缩小到这个范围.以下是:

>一个Jython脚本script.py在与java -jar启动时运行良好,jython.jar script.py
> Java主类Interpreter.java,它使用Jython 2.2方法尝试解释上面给出的Jython脚本

Python脚本:

#global aFunction # uncommenting this makes the script work from Java

def main():
    aFunction()


def aFunction():
    print 'aFunction() called'


main()

Java类:

import java.io.File;

import org.python.core.PyException;
import org.python.core.PyStringMap;
import org.python.core.PySystemState;


public class Interpreter {

    public static void main(final String[] args) {
        final PyStringMap localNameSpace = new PyStringMap();
        final PyStringMap globalNameSpace = new PyStringMap();

        final File scriptFile = new File("../../jython/script.py");       
        PySystemState.initialize();

        try {
            org.python.core.__builtin__.execfile(scriptFile.getAbsolutePath(), globalNameSpace, localNameSpace);
        } catch (final PyException pyException) {
            pyException.printStackTrace();
        }

    }

}

这是运行Java类时遇到的错误.

Traceback (innermost last):
  File "/opt/coflight/axel/workspace/essais/../../jython/script.py", line 12, in ?
  File "/opt/coflight/axel/workspace/essais/../../jython/script.py", line 5, in main
NameError: aFunction

关于如何更正Java类以使解释器可以运行Jython脚本的任何想法?谢谢 !

解决方法:

我无法解释您得到的错误,但是我可以使用PythonInterpreter使它起作用:

org.python.util.PythonInterpreter interp = new org.python.util.PythonInterpreter();
String scriptname = "script.py"; 
interp.execfile(scriptname);

标签:jython,java
来源: https://codeday.me/bug/20191208/2088843.html