2017-01-21 1 views
0

Ich habe in jdonth in mein Java-Programm einbetten, um Benutzern zu ermöglichen, Skript in Python. Allerdings möchte ich die Ausgabe ihrer Python-Skripte in ein Java-Textfeld in meinem Programm drucken. Aber ich kann nicht einen Weg finden, die Ausgabe des jython Motor einzubetten:Jython drucken alle Terminal-Ausgabe/zuweisen Ausgabe als Zeichenfolge

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()); 
     } 
    } 

Ich versuchte dies die Ausgabe von eval zu bekommen.

This outputs 6 

Was ist richtig aber ist, wenn ich das gleiche von einer print-Anweisung versuchen:

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

der Ausgang null ist, wenn es sollte Hallo Welt sein. Gibt es eine Möglichkeit, den gesamten Output/Terminal-Inhalt eines Skripts zu drucken, das von jython eval/exec ist?

Antwort

2

Sie können Writer für die Skripts festlegen, die über die Engines ScriptContext verwendet werden sollen. Zum Beispiel:

ScriptEngine pyEngine = new ScriptEngineManager().getEngineByName("python"); 
StringWriter sw = new StringWriter(); 
pyEngine.getContext().setWriter(sw); 
pyEngine.eval("print('Hello World')"); 
System.out.println(sw.toString()); 

Drucke

Hello World 
+0

Perfect! Vielen Dank Ich verbrachte eine lange Zeit auf Google Suche nach, wie dies zu tun, mit den einzigen Ergebnissen zu implementieren verschiedene Arten von Stream-Reader, also noch einmal danke :) – D3181