Java 在使用ApacheCommonsExec时,如何分别收集标准输出和标准错误?
下面的代码获取所有输出,无论是stdout还是stderrJava 在使用ApacheCommonsExec时,如何分别收集标准输出和标准错误?,java,stdout,stderr,apache-commons-exec,Java,Stdout,Stderr,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
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();
如何分别获取这两个流?PumpStreamHandler为stderr获取第二个构造函数参数。正如您所观察到的,只有一个
OutputStream
的构造函数将同时写入stdout和stderr。看见 因此,下面的方法应该能够处理它
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();
令人惊叹的!多谢!