【问题标题】:Jython printing all terminal output / assign output as stringJython 打印所有终端输出/将输出分配为字符串
【发布时间】:2017-01-22 07:31:50
【问题描述】:

我一直在研究将 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 的脚本的整个输出/终端内容?

【问题讨论】:

    标签: java python jython


    【解决方案1】:

    您可以为脚本设置一个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
    

    【讨论】:

    • 完美!非常感谢我在谷歌上花了很长时间寻找如何做到这一点,唯一的结果是实现各种类型的流阅读器,所以再次感谢:)
    猜你喜欢
    • 2020-02-24
    • 2016-04-08
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2015-10-15
    • 2017-12-24
    相关资源
    最近更新 更多