2016-03-28 15 views
2

コマンド(Inkscape、 "no-gui"モード)を実行するExecタスクがあります。このコマンドは信じられないほど騒がしく、重要ではない警告をstderrに吐き出す傾向があります。しかし、stderrに送るものの中には有用なものもありますので、私はstderrを完全に抑制したくありません。gradle Execタスクでstderrを簡単にフィルタリングする方法はありますか?

現在、私はgrep -vを使用して私が無意味だと知っているstderrからのメッセージを除外するラッパーシェルスクリプトを持っています。次に、私のExecタスクがこのスクリプトを呼び出させるようにします。

私は外部のシェルスクリプトに頼る必要がないように、これを自己完結型にする方法があるのだろうかと思います。

#!/bin/bash 
svg="$1" 
png="$2" 

exec inkscape -z -D -w 48 -e "$png" "$svg" 2> >(
    grep -v '^\*\* (inkscape:[0-9]*): CRITICAL \*\*: dbus_g_' | 
    grep -v '^$' | 
    grep -v '^Failed to get connection$' >&2 
) 

(はい、それを信じるかどうか、それらの "CRITICAL" エラーは取るに足らないです:

task createIcon(type:Exec) { 
    def outdir = new File(fromSvgDir, "drawable-ldpi/") 
    outputs.dir(outdir) 
    doFirst { 
     outdir.mkdirs() 
    } 
    def svg = 'src/images/ic_launcher.svg' 
    inputs.source(new File(svg)) 
    def png = new File(outdir, "ic_launcher.png") 
    outputs.file(png) 
    commandLine "$workingDir/svgToPng.sh", svg, png 
} 

svgToPng.shは次のようになります。


私のGradleのタスクは、次のようになりますInkscapeは実際には、インクがなくても何をするかで成功しています)。

+1

あなたは何を持っているか、例外をスローすることによって、ビルドを停止する可能性現時点では? –

+1

@tim_yates質問の更新を参照してください。 –

+0

うーん、あなたは即座にプロセスのアウトストリームをフィルタリングできるかどうかは確信していませんが、確かに自分のストリームに出力を保存して、プロセスが終了した後に*処理/フィルタリング/印刷を行うことができます。 – RaGe

答えて

2

私はこれをテストしていませんが、このいくつかのバリエーションは、おそらく動作します:

task createIcon << { 
    def os = new ByteArrayOutputStream() 

    def result = exec { 
     def outdir = new File(fromSvgDir, "drawable-ldpi/") 
     outputs.dir(outdir) 
     doFirst { 
      outdir.mkdirs() 
     } 
     def svg = 'src/images/ic_launcher.svg' 
     inputs.source(new File(svg)) 
     def png = new File(outdir, "ic_launcher.png") 
     outputs.file(png) 
     commandLine "$workingDir/svgToPng.sh", svg, png 
     standardOutput = os 
    } 

    def outputAsString = os.toString() 
    def match = outputAsString =~ /somepattern/ 
    println match 
} 

あなたはまた、特定の一致に応じて、

throw new GradleException('error occurred') 
+0

を投稿してください。今は、ある種の 'GrepFilterOutputStream'が必要です。 –

関連する問題