【问题标题】:How do I collect Standard Out and Standard Error separately when using Apache Commons Exec?使用 Apache Commons Exec 时如何分别收集标准输出和标准错误?
【发布时间】:2016-04-06 21:30:42
【问题描述】:

以下代码获取所有输出,无论是标准输出还是标准错误。

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

如何分别获取两个流?

【问题讨论】:

    标签: java stdout stderr apache-commons-exec


    【解决方案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();
    

    【讨论】:

    • 太棒了!非常感谢!
    猜你喜欢
    • 2014-08-25
    • 2014-03-05
    • 1970-01-01
    • 2020-04-12
    • 2017-04-08
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多