2013-12-10 1 views
1

에 매달려 :ProcessBuilder를 - 다음과 같은 간단한 프로그램을 프로그램 실행 내의 readLine() 메소드

ProcessBuilder pb = new ProcessBuilder("powershell.exe", "-Command", "dir"); 
    Process p = pb.start(); 
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line; 
    while((line = bufferedReader.readLine()) != null){ 
     System.out.println(line); 
    } 

    System.out.println("Exit"); 

절대로 "종료"에 println에 도달하지 - 바로 readLine() 방법에 무한 중단됩니다. PowerShell이 ​​마지막 행에 \n을 출력하지 않고 readLine이 끝에 도달했는지 여부를 확신 할 수 없다는 사실이 (아마도) 이해합니다. 이 문제를 극복하고 입력 스트림을 올바르게 읽을 수있는 방법이 있습니까? BTW.

ProcessBuilder pb = new ProcessBuilder("powershell.exe", "-Command", "dir"); 
     pb.redirectErrorStream(true); 
     Process p = pb.start(); 
//  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
//  String line; 
//  while((line = bufferedReader.readLine()) != null){ 
//   System.out.println(line); 
//  } 
    p.waitFor(); 
    System.out.println("Exit"); 

은 또한 무한 응답 ... 파워 쉘이 종료되지

답변

1

: ProcessBuilder를 inheritIO에있어서

UPDATE

...이 같은 문제가 발생했습니다. 아마도 Java를 사용하여 디렉토리를 나열 하겠지만,이 예제는 사용자의 예제와 함께 작동해야합니다.

ProcessBuilder pb = new ProcessBuilder("dir"); 
+0

그래서 마지막에 'exit'와 같이 sth를 제공해야합니까? – Bober02

+0

대신 PowerShell에서 stdout을 닫을 수 있다고 가정합니다. –

0

무엇이 문제인지 잘 모릅니다. 나는 당신의 코드로 새로운 프로젝트를 만들려고 노력했다. (몇개의 try-catch와 print 문장으로 추가되었다.) 그것은 나를 위해 일한다. 여기 내가 사용한 것입니다. 여기

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 


public class temp { 

    public static void main(String[] args) { 
     ProcessBuilder pb = new ProcessBuilder("powershell.exe", "-Command", "dir"); 
     Process p; 
     try { 
      p = pb.start(); 
     } catch (IOException e) { 
      System.out.println("Failed to start powershell"); 
      return; 
     } 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line; 
     System.out.println("Begin!"); 
     try { 
      while((line = bufferedReader.readLine()) != null){ 
       System.out.println("reading..."); 
       System.out.println(line); 
      } 
     } catch (IOException e) { 
      System.out.println("Failed to read line"); 
      return; 
     } 

     System.out.println("Exit"); 

    } 

} 

Begin! reading... 

reading... 

reading... 
    Directory: C:\Users\AbrahamV\workspace\201_stackoverflow reading... 

reading... 

reading... Mode    LastWriteTime  Length Name   reading... 
----    -------------  ------ ----                  reading... d----  12/10/2013 9:29 PM   bin   reading... d----  12/10/2013 9:27 PM   src   reading... 
-a---  12/10/2013 9:27 PM  232 .classpath                 reading... 
-a---  12/10/2013 9:27 PM  393 .project                 reading... 

reading... 

Exit 

출력은 순간 아니었다 결과 콘솔 출력된다. 아무것도 인쇄되기 전에 잠시 걸렸습니다.