5

以下のコードは、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();

両方のストリームを別々に取得するにはどうすればよいですか?

4

1 に答える 1

5

PumpStreamHandlerstderr の 2 番目のコンストラクター引数を取ります。あなたが観察したように、 1つしかないコンストラクターに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();
于 2016-01-02T23:28:19.337 に答える