質問

導入時におけるプロセスからJava、stderrは、標準出力に出力できるブロックを出力ではないから読み取る事に成功しました。現在のとしているスレッドは積極的に読み込みから一つのスレッドブロックします。

が簡単に参加の流れはならないサブプロセスを継続しまいを失っていないのデータstderr?

役に立ちましたか?

解決

セットのredirectErrorStream物件ProcessBuilder送stderr出力を標準出力に出力:

ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);

してくださいスレッドを作りへの対応の過程でストリームに、以下のようなもの:

Process p = builder.start();

InputHandler outHandler = new InputHandler(p.getInputStream());

がInputHandlerのように定義されている。

private static class InputHandler extends Thread {

    private final InputStream is;

    private final ByteArrayOutputStream os;

    public InputHandler(InputStream input) {
        this.is = input;
        this.os = new ByteArrayOutputStream();
    }

    public void run() {
        try {
            int c;
            while ((c = is.read()) != -1) {
                os.write(c);
            }
        } catch (Throwable t) {
            throw new IllegalStateException(t);
        }
    }

    public String getOutput() {
        try {
        os.flush();
        } catch (Throwable t) {
            throw new IllegalStateException(t);
        }
        return os.toString();
    }

}

また、作成二InputHandlersのためのInputStreamとErrorStream.このプログラムブロックされない場合は読み取ることがで90%の戦い:)

他のヒント

ってスレッドは、読みstdout、およびstderr?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top