java - 简单的 Jython 脚本不从 Java 运行

标签 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);

关于java - 简单的 Jython 脚本不从 Java 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941765/

相关文章:

java - 如何在ListView中存储ID并在android java中显示类似<option value ="id">data</option>的数据

java 当我调用 Thread.sleep() 时,数据的可见性

java - 有没有办法检查文档中是否存在标签名称? (DOM - Jython)

python - ReportLab 和 Jython?

python - 我在 Jython 2.7 中收到错误 : "java.lang.NullPointerException: Inflater has been closed" when sending requests using requests 2. 8.1

java - 将字符串 "yyyy-MM-dd"转换为 "E, MMM d"

java - Android - GestureDetection 强制关闭应用程序

java - 为什么我需要抽象类中的构造函数?

java - Jython 是否需要 Java 版本的 Selenium2 库才能运行?

websphere - Jython wsadmin : get nodeName of server