2012-09-26 1 views
1

내가 프로세스를 실행하고 있다고 가정하고 나는 고전적인 기법을 통해 자사의 스트림을 리디렉션 할 :Java 프로세스 처리 : 출력 + 오류 스트림으로 올바른 순서를 유지 하시겠습니까?

이제
ProcessBuilder pb = new ProcessBuilder("C:/folder/script.bat"); 
Process p = pb.start(); 
InputStreamReader out = p.getInputStream(); 
InputStreamReader err = p.getErrorStream(); 
OutputStreamWriter in = p.getOutputStream();  

내 질문 : 내가 흑인의 모든 출력 및 빨간색의 모든 오류를 표시 할, 그리고 내가 원하는을 올바른 순서를 유지합니다.

  • 내 마음에 오는 첫 번째 방법은 올바른 순서로 병합하는, pb.redirectErrorStream(true);을 사용하는 것입니다,하지만 서로 다른 색상을 적용하는 것은 더 이상 가능하지 않습니다.
  • 두 번째 방법은 두 스트림에서 새 출력을 교대로 확인하는 것입니다. 여기서 문제는 출력과 오류가 거의 동시에 발생하면 어느 것이 먼저 표시되어야하는지 결정하지 못한다는 것입니다. 그래서 여기에 정확한 색소를 표시 할 수 있지만 올바른 순서는 아닙니다.

예상대로 작동하지 않습니다. 출력/오류를 서로 다른 색으로 올바른 순서로 표시하려면 어떻게해야합니까?

답변

2

당신의 기술로 당신은 같은 스레드에서 양쪽 모두 듣고 있기 때문에 하나 또는 다른 스트림을 막을 수 있다는 것이 문제입니다. 다른 스레드에서 이들을 청취하고 데이터가 들어올 때이를 단순히 표시해야합니다.

+0

영리한 아이디어, 감사합니다! 그러나 스트림에서이 기능을 볼 수 없으므로 두 스레드가 동기화되어 있는지 확인하는 방법이 완전히 명확하지 않습니다. 출력 + 오류의 거의 동시 발생이 정확한 순서로 들려오는 것을 어떻게 확신 할 수 있습니까? – user1111929

관련 문제