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