문제

을 실행하면 프로세스에서 Java,모두 stderr 고 표준출력으로 출력을 차단할 수 있습에 출력하지 않는 경우에서 읽은 파이프.현재 갖고 있는 쓰레드는 프로 적극적으로 읽어에서 하나의 메인 스레드 블록에서 다른합니다.

이 있는 쉬운 방법은 두 가지 스트림 또는 그렇지 않으면 하위 프로세스를 계속을 잃지 않으면서 데이터 stderr?

도움이 되었습니까?

해결책

설정 redirectErrorStream 시설에 ProcessBuilder 을 보내 stderr 출력을 stdout:

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%의 전투가:)

다른 팁

그냥 두 개의 스레드를,하나에서 읽고 표준출력으로 출력에서 하나 stderr?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top