Jython 打印所有终端输出/将输出分配为字符串
Jython printing all terminal output / assign output as string
我一直在考虑将 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 编写的脚本的全部 output/terminal 内容?
你可以设置一个Writer
for the scripts to use through the engines 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
我一直在考虑将 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 编写的脚本的全部 output/terminal 内容?
你可以设置一个Writer
for the scripts to use through the engines 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