2017-01-04 2 views
0

Пытается перенаправить движок сценариев Nashorn из класса Java. Вот как я его инициализирую прямо сейчас. Я хотел бы перенаправить любой вывод из сценариев, которые запускает двигатель.Redirect Nashorn stdout и stderror

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

Я знаю Nashorn имеет следующие аргументы (ниже), но я не уверен, как инициализировать правильно и в манере, где любой выход отбрасывается программой. Возможно, создайте временный файл, а затем удалите временный файл после завершения работы? Кажется грязным для меня.


--stderr (Перенаправление STDERR к имени файла или другого TTY, например стандартный вывод)

парам: выход консоли

--stdout (Перенаправление STDOUT на имя файла или другого TTY, например STDERR)

пар: выход консоль

ответ

1

Вы можете перенаправить вывод, как это:

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

Я попытался это однако не работал. Был способен печатать из сценария. Нужно ли мне переустанавливать контекст двигателя? – MarkII

+0

Не могли бы вы предоставить образец кода? –

+0

@MarkII Я отредактировал свой ответ, предоставив полный пример кода, который демонстрирует перенаправление stdout/stderr для Nashorn. –

 Смежные вопросы

  • Нет связанных вопросов^_^