2012-01-24 7 views
0

В чем разница между запуском программы с помощью java и ее запуском с помощью командной строки? В первом случае он не работает, но во втором случае он работает нормально.Запуск внешней программы

Java:

try { 
    Runtime runtime = Runtime.getRuntime(); 
    Process proc = runtime.exec("../../../my/prog \"//10.124.12.15/C:/output/*\" ../../../input/345 -N -A"); 
    DataInputStream bis = new DataInputStream(proc.getInputStream()); 
    int _byte; 
    while ((_byte = bis.read()) != -1) 
     System.out.print((char)_byte); 
    proc.waitFor(); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} catch (InterruptedException ex) { 
    ex.printStackTrace(); 
} 

И команда:

../../../my/prog "//10.124.12.15/C:/output/*" ../../../input/345 -N -A 
+0

Может быть, путь неправильно. Почему вы не вызываете программу с использованием абсолютных путей? – Frankie

+0

Помимо рекомендаций, которые уже были предложены, обязательно выполняйте все рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/javaworld/jw-12-2000/jw-1229- traps.html). –

+0

Это проблема с разрешениями? Вы запускаете программу в другом пользовательском контексте, например в службе? –

ответ

0

Спасибо всем, я решил мою проблему:

try { 
    String cmd="/progs/my/prog //10.124.12.15/C:/output/* /temp/input/345 -N -A" 
    Runtime runtime = Runtime.getRuntime(); 
    Process proc = runtime.exec(
     new String[]{"/usr/bin/bash", "-c", cmd, "1>/dev/null 2>&1"});  
    proc.waitFor(); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} catch (InterruptedException ex) { 
    ex.printStackTrace(); 
} 
2

Попробуйте использовать абсолютный путь. Возможно, это твоя проблема.

+0

Запуск программы (выводятся выходные сообщения), но она не выполняет свою миссию - не копирует файлы. – DmitryB

Смежные вопросы