2017-01-04 3 views
0

NashornスクリプトエンジンをJavaクラスからリダイレクトしようとしています。これは今私がそれを初期化する方法です。私は、エンジンが実行するスクリプトからの出力をリダイレクトしたいと思います。リダイレクト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(例えばSTDOUT、ファイル名または別のttyにstderrをリダイレクト)

PARAM:出力コンソール

--stdout(ファイル名または別のttyにSTDOUTをリダイレクト例えば標準エラー出力)

のparam:出力コンソール

答えて

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 Nashornのstdout/stderrリダイレクションを示す完全なコード例を提供して私の答えを編集しました。 –

関連する問題