Как собрать Standard Out и Standard Error отдельно при использовании Apache Commons Exec?
Код ниже получает весь вывод, будь то stdout или stderr.
String line = String.format("paty/to/script.py");
CommandLine cmd = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
PumpStreamHandler psh = new PumpStreamHandler(stdout);
executor.setStreamHandler(psh);
int exitvalue = executor.execute(cmd);
String output = stdout.toString();
Как я могу получить оба потока отдельно?
1 ответ
Решение
PumpStreamHandler
принимает второй аргумент конструктора для stderr. Конструктор только с одним OutputStream
как вы заметили, в него будут записываться как stdout, так и stderr.
См. https://commons.apache.org/proper/commons-exec/apidocs/org/apache/commons/exec/PumpStreamHandler.html
Таким образом, подход как следующий должен справиться с этим.
String line = String.format("paty/to/script.py");
CommandLine cmd = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
ByteArrayOutputStream stderr = new ByteArrayOutputStream();
PumpStreamHandler psh = new PumpStreamHandler(stdout, stderr);
executor.setStreamHandler(psh);
int exitvalue = executor.execute(cmd);
String output = stdout.toString();
String error = stderr.toString();