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