2014-02-11 2 views
0

서블릿 프로그램이 있는데 (친구에게서 알게되었습니다) 콘솔에서 몇 가지 명령 프롬프트 명령을 실행하고 출력을 보류 중입니다. 이제는 여러 줄 콘솔 출력 줄을보고 싶습니다. 브라우저, 어떻게해야합니까? 당신이 브라우저에 쉘 명령의 출력을 인쇄 할 같은서블릿이 브라우저에 콘솔 값을 표시합니다.

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
     String[] command = 
      { 
       "zsh", 
      }; 

      Process p = Runtime.getRuntime().exec(command); 
      new Thread(new SyncPipe(p.getErrorStream(), System.err)).start(); 
      new Thread(new SyncPipe(p.getInputStream(), System.out)).start(); 
      PrintWriter stdin = new PrintWriter(p.getOutputStream()); 
      stdin.println("source ./taxenv/bin/activate"); 
      stdin.println("python runner.py"); 
      // write any other commands you want here 
      stdin.close(); 
      int returnCode = 0; 
      try { 
       returnCode = p.waitFor(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } System.out.println("Return code = " + returnCode); 


} 

class SyncPipe implements Runnable 
{ 
public SyncPipe(InputStream istrm, OutputStream ostrm) { 
     istrm_ = istrm; 
     ostrm_ = ostrm; 
    } 
    public void run() { 
     try 
     { 
      final byte[] buffer = new byte[1024]; 
      for (int length = 0; (length = istrm_.read(buffer)) != -1;) 
      { 
       ostrm_.write(buffer, 0, length); 

      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    private final OutputStream ostrm_; 
    private final InputStream istrm_; 
} 

답변

0

것 같다, 그래서 당신이 시도 할 수 있습니다 제안 :

  1. 는 HTTP 응답 객체 출력 스트림 O를 가져옵니다.
  2. o를 SyncPipe에 ostrm으로 전달하십시오.
  3. p.waitFor() 뒤에 O를 플러시합니다.

그냥이 두 라인 교체 : 나는 지금 당신의 코드를 실행할 수있는 환경이없는

new Thread(new SyncPipe(p.getErrorStream(), response.getOutputStream())).start(); 
new Thread(new SyncPipe(p.getInputStream(), response.getOutputStream())).start(); 

을, 그러나 나는이 변화가 일을한다고 생각합니다. 문제가 생기면 여기를 회신 해주십시오.

+0

좋아, 내가 잘못한 것처럼 보였다. 코드로 표시 할 수 있습니까? –

+1

내 대답을 편집했습니다. – pengfeil

관련 문제