Это продолжение этого вопроса . Предлагается ответ
для копирования потоков обработки, ошибок и ввода в версии системы
с помощью IOUtils.copy
следующим образом (после исправления различных ошибок компиляции):
import org.apache.commons.io.IOUtils;
import java.io.IOException;
public class Test {
public static void main(String[] args)
throws IOException, InterruptedException {
final Process process = Runtime.getRuntime().exec("/bin/sh -i");
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(process.getInputStream(), System.out);
} catch (IOException e) {}
} } ).start();
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(process.getErrorStream(), System.err);
} catch (IOException e) {}
} } ).start();
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(System.in, process.getOutputStream());
} catch (IOException e) {}
} } ).start();
process.waitFor();
}
}
Однако полученный код не t работают для интерактивных процессов, таких как выполнение команды sh -i
. В последнем случае нет ответа ни на одну из команд sh
.
Мой вопрос: не могли бы вы предложить альтернативу для копирования потоков, которая будет работать с интерактивными процессами?