Я работаю над большим проектом 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? Спасибо!