2015-06-29 2 views
0

У меня возникли проблемы с получением результата подпроцесса. Обычно я бы использовал process.getInputStream(). Однако в этом случае я устанавливаю подпроцесс наследовать от родительского ввода-вывода. Мне нужно сделать это, потому что выход из подпроцесса превышает буфер, установленный ядром, и, таким образом, будет зависать. Я использую Linux btw.Получение вывода подпроцесса, унаследованного родительского IO

//creating a named pipe 
    File fifo = fifoCreator.createFifoPipe("fifo"); 
    String[] command = new String[] {"cat", fifo.getAbsolutePath()}; 
    process = new ProcessBuilder(command).inheritIO().start(); //Inherit IO 

    FileWriter fw = new FileWriter(fifo.getAbsoluteFile()); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write(boxString); 
    bw.close(); 
    process.waitFor(); 
    fifoCreator.removeFifoPipe(fifo.toString()); 

    //Gets nothing here 
    stdInput = new BufferedReader(new InputStreamReader(process.getInputStream())); 
    String input = readAllLines(stdInput); 

В идеале я хочу сохранить все в памяти, так как хочу хорошей производительности и меньше мусора.

Есть ли способ перенаправить вывод подпроцесса в некоторую структуру данных? Если нет, есть ли способ получить результат?

Я думаю о создании отдельного потока, который получает выходной поток.

ответ

2

Чтобы избежать проблемы с буфером ядра, вы можете использовать поток для чтения вывода, как в this question. Они называют это StreamGobbler

Смежные вопросы