2013-03-21 3 views
1

qemu-img를 사용하여 Java 코드에서 디스크 공간을 만들려고하므로 프로세스 및 런타임 클래스를 인스턴스화했습니다. 프로그램을 실행할 때 비슷한 실행을 위해 동일한 메커니즘을 사용했지만 명령은 실행되지 않습니다. 그래서 나는 여기서 무언가를 놓칠 지 궁금합니다.Java 코드에서 Linux 프로그램을 실행하는 방법

qemu-img create -f raw ~/testSPACE.img 23.0M 

this is the correct one: /qemu-img create -f raw ~/testSPACE.img 23.0M 
Creating the image... 
from process try..catch 
from finally entry 

하지만 디렉토리로 이동하면 파일이 생성되지 않습니다

StringBuilder commandBuilder = new StringBuilder("qemu-img create -f "+chosenStorageType+" ~/"+storageName+".img "+storageSize+"M"); 
System.out.println(commandBuilder); 
String command = commandBuilder.toString(); 
System.out.println("this is the correct one: "+command); 

System.out.println("Creating the image..."); 
Runtime runtime = Runtime.getRuntime(); 
Process process = null; 
try { 
    process = runtime.exec(command); 
    System.out.println("from process try..catch"); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
    System.out.println(e1.getMessage()); 
}finally{ 
    System.out.println("from finally entry"); 
    process.destroy(); 
} 

출력은 다음과 같습니다.

터미널에 출력을 복사하면 테스트해도됩니다. 모든 것이 매력처럼 작동합니다. 여기

" ~/"+storageName+".img " 

+3

을 통해 당신은 ~가 '적절하게 확장되고있는'확인 할 수 있나요? 거기에 완전한 절대 경로를 두어 작동하는지 확인하십시오. 때로는 그런 종류의 확장 동작이 셸에서 제공되기 때문에 일부 명령 호출 작업을 수행하지 않습니다. – Gian

+0

예 : 절대 경로를 제공하는 중 : StringBuilder commandBuilder = new StringBuilder ("qemu-img create -f"+ selectedStorageType + "/home/dartron/"+storageName+".img"+storageSize+"M"); 똑같은 일을 그냥 출력하지만 명령을 실행하지 않습니다. – user2023107

답변

1

물결표 (~)는 홈 디렉토리를 의미와 쉘에 의해 해석된다. 나는 실제 경로를 대신 할 것이다.

또한 consuming the process stdout/err 할 필요가 있음을 참고하고, 프로세스의 오류 코드를 수집 (그리고 그것을 확인!) Process.waitFor()

+0

더 강력하게 강조하기 위해'~'기호는 쉘이 해석 될 것을 요구합니다. Java는'Process'가 기본적으로 가지고 있지 않습니다. 첫 번째 명령 인'/ usr/bin/sh '을 사용하여 쉘을 사용자 명령 (예 : Linux의 경우)으로 호출해야합니다. – Perception

+0

심지어 절대 경로를 제공하는 중 : StringBuilder commandBuilder = new StringBuilder ("qemu-img create -f"+ selectedStorageType + "/home/dartron/"+storageName+".img"+storageSize+"M"); 똑같은 일을 그냥 출력하지만 명령을 실행하지 않습니다. – user2023107

+0

@ user2023107'qemu-img'의 절대 경로를 사용해보십시오. –