在android中执行管道命令

时间:2017-04-05 12:24:39

标签: java android bash pipe exec

我正在执行命令,以便将日志消息写入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命令肯定安装在系统上。这有什么不对?

1 个答案:

答案 0 :(得分:1)

logcat正在输出grep直播,但grep正在大批量处理数据。最后,如果有足够的输出,grep应该写出来。

(如果您正在写入终端而不是文件,grep的效率会稍微降低,并且在看到的每一行之后都会刷新,这会使其感觉更具互动性。这不是特定于Android&# 39; s grep;您也会在Linux或OS X上看到此行为。)

如果您使用logcat -d,它将终止而不是轮询更多日志,grep也会写出并终止。如果这不是您想要的行为,您最终可能需要使用ProcessBuilder来包装logcat并在Java应用程序中重新实现grep(不进行缓冲)。 / p>