2017-04-05 148 views
0

我正在執行命令以便將日誌消息寫入SD卡上的文件。這是已經工作:在android中執行管道命令

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

logcat正在輸出到grep直播,但grep正在大批量處理數據。最終,如果有足夠的輸出,grep應該寫出一些東西。

(如果你寫信給終端而不是文件,grep效率稍低,在看到的每一行之後都會刷新,讓它感覺更具交互性,這不是特定於Android的grep;你會看到這種行爲在Linux或OS X上也是如此)。

如果使用logcat -d,它將終止而不是輪詢更多日誌,並且grep也會寫出並終止。如果這不是您想要的行爲,您可能最終需要使用ProcessBuilder來包裝logcat並在Java應用程序內重新實現grep(無緩衝)。