2010-08-22 5 views
3

나는 (자바),왜 캔트 내가 실행할 때

rt.exec("qq.exe -i ..(some other parameters) > qq.log");//*1 

는 qq.exe -i는 .. (다른 매개 변수)> 터미널에서 잘 작동 qq.log 한 자바 런타임에 로그 파일을 사용 qq.log 파일을 올바르게 보존합니다.

그러나 rt.exec (* 1)을 사용하지 마십시오. "> qq.log"부분에서 문제가 발생합니다. 그 부분을 삭제하면 rt.exec (* 1)이 작동하지만 이번에는 qq.log 파일이 없습니다.

이 문제의 원인은 무엇입니까?

답변

3

rt.exec() sh/bat 코드를 실행할 수 없습니다. 그것은 단지 다른 프로그램을 호출하는 것입니다. 셸에 고유 한 > 기호가있는 qq.exe의 출력 스트림을 리디렉션하려고하면 java가 수행 할 작업을 이해하지 못합니다. 당신의 exec 방법으로 어떤 프로그램을 실행 Processrt.exec()에 의해 반환받을 때

대안입니다. Process은 응용 프로그램에 대한 OutputStream, 응용 프로그램의 InputStream 및 시작된 응용 프로그램에 대한 ErrorStream을 제공 할 수 있습니다.

InputStream을 사용하면 프로그래밍 방식으로 qq.exe의 결과를 읽을 수 있으며이를 파일에 기록하면됩니다.

+1

thnx 많이 있습니다. 사소한 수정 : 그것은 OutputStream이 아니며 InputStream입니다. 프로그램의 출력은 InputStream에 저장됩니다. OutputStream은 우리 프로그램의 결과물입니다 ... – ogzylz

0

Java 7에는 입출력/오류 스트림을 파일로 /로부터 리디렉션 할 수있는 ProcesBuilder.Redirect 클래스가 추가되었습니다. 다음과 같이 사용할 수 있습니다 :

ProcessBuilder builder = new ProcessBuilder("cat", "/proc/meminfo"); 
    // Append all errors from process to log file: 
    builder.redirectError(Redirect.appendTo(new File("/tmp/my.log"))); 
    Process process = builder.start(); 

입력 및 출력을 리디렉션 할 수있는 방법을 사용하십시오. 전체 예제는 여기에 있습니다 : Run external process in Java 7.

관련 문제