[英]Couldn't read stream from external process
以下是我編寫的程序,目的是在linux中啟動進程並在控制台中打印結果。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Driver {
public static void main(String[] args) {
try {
Process process = new ProcessBuilder("/usr/bin/R").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我希望在終端中啟動R時將顯示R版本和其他內容,並將它們打印在控制台中。 但是什么都沒有印出來,也不例外。
這是什么問題?
編輯
當我使用“ ls”或“ ps”之類的命令時,上述程序可以正常工作。 但不適用於任何不會自行退出的命令
由於進程是在單獨的線程中啟動的,因此當執行到達循環時, br
可能只是處於錯誤的狀態。
原始解決方案:如果不需要與啟動的進程進行交互,則可以在循環之前添加process.waitFor()
,以確保進程已完成並且輸出可用。
通常,與外部進程的交互將需要單獨的線程來監視其狀態,讀取std和std err流。 在這種情況下,使用庫解決方案是有意義的,例如Apache Commons Exec (請參閱教程 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.