1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果您希望 Java 程序捕獲輸出,請不要將輸出重定向到其他地方,即不要調(diào)用inheritIO()
,盡管您可能想調(diào)用redirectErrorStream(true)
.
你覺得有什么inheritIO()
作用?
將子進(jìn)程標(biāo)準(zhǔn) I/O 的源和目標(biāo)設(shè)置為與當(dāng)前 Java 進(jìn)程的源和目標(biāo)相同。
這是一種方便的方法。表單的調(diào)用
pb.inheritIO()行為方式與調(diào)用完全相同
pb.redirectInput(Redirect.INHERIT) .redirectOutput(Redirect.INHERIT) .redirectError(Redirect.INHERIT)
當(dāng) I/O 被重定向時(shí),你認(rèn)為getInputStream()
會發(fā)生什么?
返回連接到子進(jìn)程正常輸出的輸入流。流從該
Process
對象所代表的進(jìn)程的標(biāo)準(zhǔn)輸出中獲取管道傳輸?shù)臄?shù)據(jù)。如果子進(jìn)程的標(biāo)準(zhǔn)輸出已使用重定向,
ProcessBuilder.redirectOutput
則此方法將返回空輸入流。
應(yīng)該很明顯,但什么是空輸入流?
標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤的目的地。默認(rèn)情況下,子進(jìn)程將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤寫入管道。Java 代碼可以通過
Process.getInputStream()
和返回的輸入流訪問這些管道Process.getErrorStream()
。但是,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤可能會使用redirectOutput
和重定向到其他目的地redirectError
。在這種情況下,Process.getInputStream()
和/或Process.getErrorStream()
將返回一個(gè)空輸入流,為此:
該
read
方法總是返回-1
該
available
方法總是返回0
該
close
方法什么都不做
添加回答
舉報(bào)