2012-09-14 7 views
1

2 개의 인자가 필요한 펄 스크립트가 있습니다. 저는 현재 우분투를 사용하고 난 펄 스크립트가 존재하는 디렉토리로 변경하여 내가 내 자바 프로그램에서 펄 스크립트를 실행하려고 할 때, 그러나우분투에서 java에서 perl 스크립트를 실행하는 방법

perl tool.pl config=../mydefault.config file=../Test 

를 작성하여 터미널에서 펄 스크립트를 실행하도록 관리 (나는 이클립스를 사용하고있다.), 항상 나에게 메시지를 준다. Command Failure. 다음 코드입니다.

Process process; 
try { 
    process = Runtime.getRuntime().exec("perl /home/Leen/Desktop/Tools/bin/tool.pl config=../mydefault.config file=../Test"); 
    process.waitFor(); 
    if(process.exitValue() == 0) { 
     System.out.println("Command Successful"); 
    } else { 
     System.out.println("Command Failure"); 
    } 
} catch(Exception e) { 
    System.out.println("Exception: "+ e.toString()); 
} 

내 코드가 잘못 되었습니까?

현재 가지고있는로
Runtime.getRuntime().exec(new String[] {"perl", "/home/Leen...", "config=...", "file=..."}); 

, 런타임 그대로perl /home/Leen/Desktop..., 공간과 모든라는 명령 을 찾았된다

+0

터미널에서 실행할 때 명령의 존재 상태를 확인 했습니까? '$? '. Java 코드의 올바른 디렉토리에서 실행하고 있습니까? –

+0

exec 내의 경로. 기능이 잘못되었습니다. 스크립트를 실행하기 전에 System.properties를 인쇄하고 런타임 환경을 확인하십시오. 아니면 절대 경로로 시도하십시오 : 나는/home/user/....을 의미합니다. – gersonZaragocin

답변

6

당신은 같은 separating the command from it's arguments in the call to exec()이어야한다. 당신은 터미널에서 전체 명령을 실행하면, 쉘은 공간이 (/home/Leen/Desktop..., config=..., file=...)에 전달해야하는 인수에서 명령 (perl)의 이름을 구분 실현 똑똑

. Runtime.exec()은 그렇게 똑똑하지 않습니다.

관련 문제