如何使用进程和pid过滤正确捕获logcat?

3df52oht  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(409)

这似乎很简单。
我在用 Runtime.getRuntime().exec(commandString); 我试过了

String commandString = "logcat -v raw --pid=" + PID);
Runtime.getRuntime().exec(commandString);

我试过了,但没试过 -v raw 并且还尝试(并且需要)使用 | . 似乎什么都没用。我有一个 new BufferedReader(new InputStreamReader(p.getInputStream())); 什么也得不到。如果我不在pid上过滤,它会工作,但打印出所有命中logcat的内容,这不是很有用。
我错过了什么?
这是重要部分的全部内容。

try {
            Runtime.getRuntime().exec("logcat -c").waitFor();

            StringBuilder pids = new StringBuilder("");
            for (int i = 0; i < PIDs.size(); i++){
                pids.append(Integer.toString(PIDs.get(i)));
                if (i < PIDs.size() - 1){
                    pids.append("|");
                }
            }
            String commmandString = "logcat -v raw --pid=" + pids);
            p = Runtime.getRuntime().exec(commmandString);
            mBufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));

        } catch (IOException e) {} catch (InterruptedException e) {}
        Runtime.getRuntime().addShutdownHook(new Thread() {
            public void run() {
                p.destroy();
            };
        });

        mThreadAlive = true;
        mLoggingThread.start();
n7taea2i

n7taea2i1#

这将帮助您将输出重定向到 InputStream (你可以把它包起来) BufferedReader ):

String[] argv =
            new String[] { "logcat", "-v", "raw", "--pid=" + pid };
        Process process =
            new ProcessBuilder(argv)
            .inheritIO()
            .redirectOutput(ProcessBuilder.Redirect.PIPE)
            .start();

        try (InputStream in = process.getInputStream()) {
            // Consume InputStream

            int status = process.waitFor();

            if (status != 0) {
                throw new IOException(argv + " returned exit status " + status);
            }
        }

相关问题