简单的Jython脚本不';不能从Java运行

简单的Jython脚本不';不能从Java运行,java,jython,Java,Jython,我正在从事一个大型Java项目,Jython脚本是从Java代码解释的。由于一个我还没有弄明白的原因,除非函数、类、变量都声明为全局的,否则Jython脚本中没有任何东西可以工作。 为了追查这个问题,我把问题缩小到这个范围。以下是: Jython脚本script.py,当与java-jar Jython.jar script.py一起启动时运行良好 一个Java主类解释器.Java,它使用Jython 2.2方法来尝试和解释上面给出的Jython脚本 Python脚本: #global aF

我正在从事一个大型Java项目,Jython脚本是从Java代码解释的。由于一个我还没有弄明白的原因,除非函数、类、变量都声明为全局的,否则Jython脚本中没有任何东西可以工作。 为了追查这个问题,我把问题缩小到这个范围。以下是:

  • Jython脚本
    script.py
    ,当与
    java-jar Jython.jar script.py一起启动时运行良好
  • 一个Java主类
    解释器.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);

是啊,这对我也很管用!我想我的应用程序应该使用这个,而不是调用
\uuuuu builtin\uuuuuu
在scala中是否有这样的选项?@EdwinVivekN:我不知道你的意思。如果你需要帮助,你应该问一个新问题。