Есть ли способ вернуть значение вывода кода python типа «print ('python code')» в String или другой объект, используя PythonInterpreter - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь создать простой python интерпретатор, используя java. в основном, вы пишете некоторый python код, такой как print ('hello world'), и запрос отправляется внутреннему приложению с весенней загрузкой, которое интерпретирует код с использованием библиотеки PythonInterpreter и возвращает результат в JSON форма объекта как:

{
  "result": "hello world"
}

Я попробовал следующий код, который отображает результат печати на консоли, но я еще не смог присвоить возвращаемую переменную, которая мне нужна для построения JSON response.

PythonInterpreter interp = new PythonInterpreter();
interp.exec("print('hello world')");

печатает hello world на консоли.

Я хочу что-то вроде этого:

PythonInterpreter interp = new PythonInterpreter();
interp.exec("x = 2+2");
PyObject x = interp.get("x");
System.out.println("x: "+x);

это печатает x: 4 я хочу сделать то же самое с печатью, но я до сих пор не нашел решения.

у кого-нибудь есть идеи о том, как это сделать, будет очень признателен за вашу помощь.

1 Ответ

3 голосов
/ 02 февраля 2020

Если вы прочитаете документацию, т.е. javado c из PythonInterpreter, вы найдете следующие методы:

  • setErr(Writer outStream) - Устанавливает Writer для использования в стандартном потоке вывода, sys.stderr.

  • setOut(Writer outStream) - Устанавливает Writer для использования в стандарте поток вывода, sys.stdout.

Таким образом, вы бы сделали это так:

StringWriter out = new StringWriter();
PythonInterpreter interp = new PythonInterpreter();
interp.setOut(out);
interp.setErr(out);
interp.exec("print('hello world')");
String result = out.toString();
System.out.println("result: " + result);
...