如果你在Android应用程序中使用ProcessBuilder执行命令,有时会发现没有任何输出显示在你的InputStream Reader中,甚至在你的进程完成之后也没有。这可能是因为你忘记了使用inheritIO()方法将子进程的输出和错误流继承到你的应用程序。
以下是解决该问题的示例代码:
try {
ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
// 继承子进程的输出流和错误流
processBuilder.inheritIO();
int exitCode = process.waitFor();
Log.d(TAG, "Exit Code: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
在上面的示例代码中,我们使用ProcessBuilder执行命令“ls -l”。在启动子进程之前,我们使用redirectErrorStream()方法将子进程的输出和错误流合并到一个流中。然后,我们使用inheritIO()方法将这个合并后的流继承到我们的应用程序的标准输出和错误流中。
通过这种方法,您应该能够读取并显示子进程的输出。如果你仍然无法读取输出,请确保子进程正在输出到标准输出流而不是错误流中。