有没有办法使用 PythonInterpreter return python 代码的输出值 "print('python code')" 到字符串或其他对象中
Is there a way to return the value of the output of python code like "print('python code')" into a String or other object using PythonInterpreter
我正在尝试使用 java 制作一个简单的 python 解释器。基本上,您编写了一些 python 代码,例如 print('hello world') 并且请求被发送到 spring 引导后端应用程序,该应用程序使用 PythonInterpreter[=31 解释代码=] 库和 returns 以 JSON 对象形式的结果,如:
{
"result": "hello world"
}
我尝试了以下在控制台上显示打印结果的代码,但我无法将 return 分配给构建 JSON 响应所需的变量。
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
我想对打印做同样的事情,但我仍然没有找到解决方案。
如果有人知道如何执行此操作,将非常感谢您的帮助。
如果你阅读文档,即 PythonInterpreter
的 javadoc,你会发现以下方法:
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);
我正在尝试使用 java 制作一个简单的 python 解释器。基本上,您编写了一些 python 代码,例如 print('hello world') 并且请求被发送到 spring 引导后端应用程序,该应用程序使用 PythonInterpreter[=31 解释代码=] 库和 returns 以 JSON 对象形式的结果,如:
{
"result": "hello world"
}
我尝试了以下在控制台上显示打印结果的代码,但我无法将 return 分配给构建 JSON 响应所需的变量。
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
我想对打印做同样的事情,但我仍然没有找到解决方案。
如果有人知道如何执行此操作,将非常感谢您的帮助。
如果你阅读文档,即 PythonInterpreter
的 javadoc,你会发现以下方法:
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);