Jython 打印所有终端输出/将输出分配为字符串

Jython printing all terminal output / assign output as string

我一直在考虑将 jython 嵌入到我的 java 程序中,以允许用户在 python 中编写脚本。但是我想将他们的 python 脚本的输出打印到我程序中的 java 文本框中。但是我找不到嵌入 jython 引擎输出的方法:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

    public class Main {
      public static void main(String[] args) throws ScriptException {
        ScriptEngine pyEngine = new ScriptEngineManager().getEngineByName("python");
        Object Pyoutput = pyEngine.eval("2*3");
        System.out.println(Pyoutput.toString());
      }
    }

我试过这个来获取 eval 的输出。

This outputs 6

这是正确的,但是当我从打印语句中尝试相同时:

Object Pyoutput = pyEngine.eval("print('Hello World')");
System.out.println(Pyoutput.toString());

本应为 Hello World,但输出为空。有没有办法打印已由 jython eval/exec 编写的脚本的全部 output/terminal 内容?

你可以设置一个Writer for the scripts to use through the engines ScriptContext。例如:

ScriptEngine pyEngine = new ScriptEngineManager().getEngineByName("python");
StringWriter sw = new StringWriter();
pyEngine.getContext().setWriter(sw);
pyEngine.eval("print('Hello World')");
System.out.println(sw.toString());

版画

Hello World