2017-04-05 18 views
0

私は、ログメッセージをsdcardのファイルに書き込むためにコマンドを実行しています。これは、すでに取り組んでいる:androidでpipeコマンドを実行する

String command = "logcat -f /storage/sdcard1/test.log"; 
Process logcatProcess = Runtime.getRuntime().exec(command); 

は今、私はこのようなファイルに書き込む前にはgrepでログ出力をフィルタリングする:

String[] command = { 
     "/system/bin/sh", 
     "-c", 
     "logcat | grep -i Test01 >> /storage/sdcard1/test.log" 
    }; 
Process logcatProcess = Runtime.getRuntime().exec(command); 

私は、ファイルの上からのコードを実行するとが作成されますが、内容はありません。 grepコマンドが確実にシステムにインストールされています。ここで何が間違っていますか?

答えて

1

logcatgrepに出力されていますが、grepは大きなバッチでデータを処理しています。結局、十分な出力があれば、grepは何かを書くべきです。

(ファイルではなく端末に書き込んでいる場合、grepは効率が悪く、見ている各行の後にフラッシュされるため、インタラクティブな感じがします。これはAndroidのgrepに固有のものではありませんLinuxやOS Xでも同様です)

logcat -dを使用すると、より多くのログをポーリングする代わりに終了し、grepも書き出して終了します。それがあなたが望む振る舞いではない場合は、をラップしてgrep(バッファリングなし)をJavaアプリケーションの中に再実装するには、ProcessBuilderを使用する必要があります。

関連する問題