2017-04-05 136 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(无缓冲)。