2017-01-04 4 views
0

Versuchen, die Nashorn Scripting Engine aus einer Java-Klasse umzuleiten. So initiiere ich es gerade jetzt. Ich möchte jede Ausgabe von den Skripten umleiten, die das Modul ausführt.Redirect Nashorn stdout und stderror

String[] nashornArgs = new String[] {"-strict", "--no-java", 
       "--no-syntax-extensions", "-dump-on-error"}; 
NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); 
ScriptEngine engine = factory.getScriptEngine(nashornArgs); 

Ich weiß, Nashorn folgende args hat (siehe unten), aber ich bin mir nicht sicher, wie man richtig und in einer Art und Weise zu initialisieren, wo jede Ausgabe durch das Programm verworfen. Vielleicht eine temporäre Datei erstellen und dann die temporäre Datei löschen, sobald die Engine fertig ist? Scheint mir unordentlich.


--stderr (Redirect Stderr auf einen Dateinamen oder eine andere TTY, zB stdout)

param: Ausgabekonsole

--stdout (stdout auf einen Dateinamen umleiten oder zu einem anderen TTY, zB stderr)

param: Ausgabekonsole

Antwort

1

Sie können Ausgabe wie folgt umgeleitet:

package com.example; 

import java.io.StringWriter; 

import javax.script.ScriptContext; 
import javax.script.ScriptEngine; 
import javax.script.ScriptException; 

import jdk.nashorn.api.scripting.NashornScriptEngineFactory; 

public class Nashorn { 
    public static void main(String[] args) throws ScriptException { 
     String[] arguments = new String[] {"-strict", "--no-java", "--no-syntax-extensions", "-dump-on-error"}; 
     NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); 
     ScriptEngine engine = factory.getScriptEngine(arguments); 
     StringWriter sw = new StringWriter(); 
     ScriptContext context = engine.getContext(); 
     context.setWriter(sw); 
     context.setErrorWriter(sw); 
     engine.eval("print('hello world')"); 
     System.out.println("redirected output: " + sw); 
    } 
} 
+0

Ich versuchte, dass jedoch nicht funktioniert. Ich konnte immer noch innerhalb eines Skripts drucken. Muss ich den Kontext der Engine zurücksetzen? – MarkII

+0

Würde es Ihnen etwas ausmachen, ein Codebeispiel bereitzustellen? –

+0

@MarkII Ich habe meine Antwort mit einem vollständigen Codebeispiel bearbeitet, das die Umleitung von stdout/stderr für Nashorn zeigt. –