Java 在android中执行pipe命令
我正在执行一个命令,以便将日志消息写入SD卡上的文件。这已经在起作用:Java 在android中执行pipe命令,java,android,bash,pipe,exec,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",
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
live,但是grep
正在大批量处理数据。最后,如果有足够的输出,grep
应该写出一些东西
(如果您正在向终端而不是向文件写入,grep
的效率稍低,每看到一行都会刷新一次,让它感觉更具交互性。这不是Android的grep
所特有的;您在Linux或OS X上也会看到这种行为。)
如果使用logcat-d
,它将终止而不是轮询更多日志,并且grep
也将写入并终止。如果这不是您想要的行为,那么您可能最终需要使用来包装logcat
,并在Java应用程序中重新实现grep
(无缓冲)