2016-01-02 4 views
4

Приведенный ниже код получает все выходные данные: stdout или stderr.Как я могу получить стандартную ошибку и стандартную ошибку при использовании Apache Commons Exec?

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(); 

Как я могу получить оба потока отдельно?

ответ

5

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(); 
+0

Awesome! Большое спасибо! – Mike