[英]Read output from external process
我正在嘗試運行.csh腳本並將其輸出讀取到StringBuffer中。 盡管從控制台運行腳本會返回一些輸出,但有時輸出仍為空。 相同的運行流有時可以返回輸出,有時不能返回輸出,盡管進程啟動的方式沒有變化(相同的腳本,path和args),並且腳本也沒有更改。 我沒有拋出任何異常。 是什么導致現在正確/成功讀取輸出? 代碼段是
public static String getOutpoutScript(Process p) {
InputStream outpout = p.getInputStream();
logger.info("Retrived script output stream");
BufferedReader buf = new BufferedReader(new InputStreamReader(outpout));
String line = "";
StringBuffer write = new StringBuffer();
try {
while ((line = buf.readLine()) != null) {
write.append(line);
}
} catch (IOException e) {
// do something
}
return write.toString().trim();
}
除了不關閉流的事實,這還不好,在某些情況下,這還是代碼中的其他內容可能會阻止輸出被正確讀取?
謝謝,
如果使用ProcessBuilder啟動它,則可以將錯誤流合並到輸出流中。 這樣,如果程序打印到stderr,您也將捕獲它。 另外,您也可以閱讀兩者。 此外,您可能不想使用readLine,如果程序未在行末顯示行末字符,則可能會停留一段時間。
也許您必須將p.getInputStream()
替換為p.getOutputStream()
除此之外,有時進程可能會阻塞等待輸入的過程,因此您必須異步讀取和寫入-一種可能的解決方案是使用不同的線程-例如,一個線程正在讀取,另一個線程正在寫入,而一個線程正在監視進程。
如果有錯誤,則默認情況下將寫入getErrorStream()。 如果您有問題,我將確保您正在某處閱讀。
如果該流的緩沖區已滿,您的程序將停止,等待您讀取它。
解決這些問題的簡單方法是使用ProcessBuilder .redirectErrorStream(true)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.