我正在执行命令,以便将日志消息写入SD卡上的文件中。这已经有效了:
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
命令肯定安装在系统上。这有什么不对?
答案 0 :(得分:1)
logcat
正在输出grep
直播,但grep
正在大批量处理数据。最后,如果有足够的输出,grep
应该写出来。
(如果您正在写入终端而不是文件,grep
的效率会稍微降低,并且在看到的每一行之后都会刷新,这会使其感觉更具互动性。这不是特定于Android&# 39; s grep
;您也会在Linux或OS X上看到此行为。)
如果您使用logcat -d
,它将终止而不是轮询更多日志,grep
也会写出并终止。如果这不是您想要的行为,您最终可能需要使用ProcessBuilder
来包装logcat
并在Java应用程序中重新实现grep
(不进行缓冲)。 / p>