2012-04-27 3 views
2

현재 자바 항아리 출력이 필요한 루비 애플리케이션을 작성 중입니다.루비로 자바 출력을 얻는 방법

현재 open3을 사용하여 java 명령의 출력을 가져올 수 없습니다.

그러나 'ls'을 사용하여 다음 루비 코드를 성공적으로 테스트했습니다.

require 'open3' 
Open3.popen3('java -version') do |stdrin, stdout, stderr| 
    @output = stdout.read 
end 

또한 java : '/ opt/java/jre/bin/java'의 절대 경로를 사용하지 않으려 고 시도했습니다.

+0

stderr에서 읽을 대기중인 출력이있을 수 있습니다. – theglauber

+0

[Niklas B.] (http://stackoverflow.com/users/916657/niklas-b)가 대답 했으므로 'java -version'이 (가) 'STDERR'에 씁니다. . 이렇게하면 문제가 해결되지 않으면 실행하려는 병에 더 가까운 것을 보여주기 위해 질문을 업데이트하십시오. – mikej

+0

그래 ... 나는 jar 파일로 명령을 추측하고있다. (jar 파일을 찾지 못했거나 다른 것이 잘못되었거나 CLASSPATH에 누락 된 것) 오류가 발생했다. 더 많은 정보 없이는 확실히 알 수 없습니다. – theglauber

답변

4

java -version가 STDERR에 기록 사전에 감사합니다, 그래서 다음과 같은 작업을해야합니다 :

리눅스에
@output = stderr.read 

, 당신은 출력이 STDERR 또는 중 하나를 억누르고으로 가고 쉘에서 확인하실 수 있습니다 표준 출력 :

java -version >/dev/null 

은 여전히 ​​정보를 인쇄합니다.

+0

나는 일했다, 당신을 그렇게 많이 고맙다 =) 나는 이것과 1 시간 동안 내 머리를 부딪 치고 있었다. –

0

구체적으로 open3이 필요합니까?

pipe = IO.popen([ '/path/to/java', '-jar', '/path/to/jarfile.jar', 
       {SDTERR=>STDOUT} ] 
pipe.close_write 
puts pipe.readlines 

을하지만, 이것에 더 많은 (예를 들어, 클래스 경로 설정) 자바 프로그램을 실행하기 종종있다; 루비 1.9에서, 내가 할 것 따라서 Java 프로그램을 실행하는 쉘 스크립트를 실행하는 것이 더 나을 수도 있습니다.

관련 문제