В прошлом посте было рассмотрено подключение интерпретатора Jyton к программе на Java и передачи ему команды в виде строкового выражения. Рассмотрим пример выполнения скрипта переданного интерпретатору из внешнего файла.
Допустим у нас имеется питоновский модуль находящийся в папке "
Script":
- class ScriptDemo():
- def __init__(self,my):
- print "Script Demo init" + my
- def ret(self):
- return "esss"
- def retint(self, i):
- return i*2
Доработаем немного предыдущий пример под работу с данным модулем.
- import java.io.FileNotFoundException;
- import java.io.FileReader;
-
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- import javax.script.ScriptException;
-
-
- public class Start {
-
- public static void main(String[] args) throws ScriptException, FileNotFoundException, NoSuchMethodException {
-
- ScriptEngineManager factory = new ScriptEngineManager();
- ScriptEngine engine = factory.getEngineByName("jython");
- //считываем текстовый файл скрипта
- FileReader script = new FileReader("Script\\script.py");
- //передаем его интерпретатору
- engine.eval(script);
- //передаем в переменную а строковое значение
- //эту переменную можно будет использовать при вызове питоновских методов
- engine.put("a"," from java1");
- //создаем объект класса скрипта
- engine.eval("obj = ScriptDemo(a)");
- //присваиваем объекту an значение возвращенное питоновским методом ret
- //значение всегда возвращается типа Object
- Object an = engine.eval("obj.ret()");
- System.out.println(an.toString());
- int n=3;
- engine.put("b",n);
- Object bn = engine.eval("obj.retint(b)");
- System.out.print( new Integer(bn.toString()));
- }
-
- }
В результате выполнения программы получаем следующий вывод
Script Demo init from java1
esss
6