我正在以下列方式启动一个过程.
try {
final Process mvnProcess = new ProcessBuilder("cmd", "/c", "mvn", "--version")
.directory(new File(System.getProperty("user.dir")))
.inheritIO()
.start();
System.exit(mvnProcess.waitFor());
} catch (final IOException ex) {
System.err.format(IO_EXCEPTION);
System.exit(1);
} catch (final InterruptedException ex) {
System.err.format(INTERRUPTED_EXCEPTION);
System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
自从我调用后,inheritIO()我期待控制台上的子进程输出,但什么都没有出现.我在这里错过了什么?
编辑:我知道我可以mvnProcess.getInputStream()显式地使用和读取进程的输出,将其写入循环中的控制台(或其中).我不喜欢这个解决方案,因为循环会阻塞我的线程.inheritIO()看起来很有希望,但显然我不明白它是如何工作的.我希望有人可以对此有所了解.
小智 2
也许这是一个从子进程中读取它的选项:
添加此代码后start(),您将把它打印到标准输出:
InputStream is = mvnProcess.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)