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

标签 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

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

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

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

最佳答案

您可以设置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

关于java - Jython 打印所有终端输出/将输出分配为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41785439/

相关文章:

java - @test注解的后台发生了什么?

java - 保存实体时避免重复键错误

python - 如何更改 pandas DataFrame 标题的样式?

python - 如何在Python中定义一组相关的变量?

sqlite - 从Jython读取sqlite数据库

Java bean 验证 - 覆盖默认消息

Java for 循环永不终止

python - Django 和 uWSGI 2 Emperor 模式的内部服务器错误

python - 如果键已经存在,则将值附加到键(python/jython)

java - Jython 图形库