簡體   English   中英

無法從外部進程讀取流

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM