1 回答

TA贡献1829条经验 获得超9个赞
如果您希望 Java 程序捕获输出,请不要将输出重定向到其他地方,即不要调用inheritIO()
,尽管您可能想调用redirectErrorStream(true)
.
你觉得有什么inheritIO()
作用?
将子进程标准 I/O 的源和目标设置为与当前 Java 进程的源和目标相同。
这是一种方便的方法。表单的调用
pb.inheritIO()行为方式与调用完全相同
pb.redirectInput(Redirect.INHERIT) .redirectOutput(Redirect.INHERIT) .redirectError(Redirect.INHERIT)
当 I/O 被重定向时,你认为getInputStream()
会发生什么?
返回连接到子进程正常输出的输入流。流从该
Process
对象所代表的进程的标准输出中获取管道传输的数据。如果子进程的标准输出已使用重定向,
ProcessBuilder.redirectOutput
则此方法将返回空输入流。
应该很明显,但什么是空输入流?
标准输出和标准错误的目的地。默认情况下,子进程将标准输出和标准错误写入管道。Java 代码可以通过
Process.getInputStream()
和返回的输入流访问这些管道Process.getErrorStream()
。但是,标准输出和标准错误可能会使用redirectOutput
和重定向到其他目的地redirectError
。在这种情况下,Process.getInputStream()
和/或Process.getErrorStream()
将返回一个空输入流,为此:
该
read
方法总是返回-1
该
available
方法总是返回0
该
close
方法什么都不做
添加回答
举报