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

时间:2017-01-21 22:57:56

标签: java python jython

我一直在研究将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

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

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

当它应该是Hello World时,输出为null。有没有办法打印jython的eval / exec脚本的整个输出/终端内容?

1 个答案:

答案 0 :(得分:2)

您可以为要通过引擎Writer使用的脚本设置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