我正在从事一个大型 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/