在 android 中执行管道命令
Execute pipe command in android
我正在执行一条命令,以便将日志消息写入 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
命令肯定安装在系统上。这里有什么问题?
logcat
正在向 grep
实时输出,但 grep
正在大批量处理数据。最终,如果有足够的输出,grep
应该写出一些东西。
(如果您正在写入终端而不是文件,grep
的效率会稍低,并且会在它看到的每一行之后刷新,使其感觉更具交互性。这不是特定于 Android 的 grep
;您也会在 Linux 或 OS X 上看到此行为。)
如果您使用 logcat -d
,它将终止而不是轮询更多日志,并且 grep
也会写出并终止。如果这不是您想要的行为,您可能最终需要使用 ProcessBuilder
来包装 logcat
并在 Java 应用程序中重新实现 grep
(无缓冲)。
我正在执行一条命令,以便将日志消息写入 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
命令肯定安装在系统上。这里有什么问题?
logcat
正在向 grep
实时输出,但 grep
正在大批量处理数据。最终,如果有足够的输出,grep
应该写出一些东西。
(如果您正在写入终端而不是文件,grep
的效率会稍低,并且会在它看到的每一行之后刷新,使其感觉更具交互性。这不是特定于 Android 的 grep
;您也会在 Linux 或 OS X 上看到此行为。)
如果您使用 logcat -d
,它将终止而不是轮询更多日志,并且 grep
也会写出并终止。如果这不是您想要的行为,您可能最终需要使用 ProcessBuilder
来包装 logcat
并在 Java 应用程序中重新实现 grep
(无缓冲)。