如何使用进程和 PID 过滤正确捕获 logcat?
How do I properly capture the logcat using a process and filtering on PID?
看起来很简单。
我正在使用 Runtime.getRuntime().exec(commandString);
我试过了
String commandString = "logcat -v raw --pid=" + PID);
Runtime.getRuntime().exec(commandString);
我已经在没有 -v raw
的情况下尝试过,并且还尝试(并且需要)使用 |
使用多个 PID。
似乎没有任何效果。我有一个 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();
这应该可以帮助您将输出重定向到 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);
}
}
看起来很简单。
我正在使用 Runtime.getRuntime().exec(commandString);
我试过了
String commandString = "logcat -v raw --pid=" + PID);
Runtime.getRuntime().exec(commandString);
我已经在没有 -v raw
的情况下尝试过,并且还尝试(并且需要)使用 |
使用多个 PID。
似乎没有任何效果。我有一个 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();
这应该可以帮助您将输出重定向到 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);
}
}