2010-03-17 3 views
7

Я работаю над приложением, у вас есть проблема с запуском команды оболочки из приложения java. вот код:запустить команду оболочки из java

public String execRuntime(String cmd) { 

     Process proc = null; 
     int inBuffer, errBuffer; 
     int result = 0; 
     StringBuffer outputReport = new StringBuffer(); 
     StringBuffer errorBuffer = new StringBuffer(); 

     try { 
      proc = Runtime.getRuntime().exec(cmd); 
     } catch (IOException e) { 
      return ""; 
     } 
     try { 
      response.status = 1; 
      result = proc.waitFor(); 
     } catch (InterruptedException e) { 
      return ""; 
     } 
     if (proc != null && null != proc.getInputStream()) { 
      InputStream is = proc.getInputStream(); 
      InputStream es = proc.getErrorStream(); 
      OutputStream os = proc.getOutputStream(); 

      try { 
       while ((inBuffer = is.read()) != -1) { 
        outputReport.append((char) inBuffer); 
       } 

       while ((errBuffer = es.read()) != -1) { 
        errorBuffer.append((char) errBuffer); 
       } 

      } catch (IOException e) { 
       return ""; 
      } 
      try { 
       is.close(); 
       is = null; 
       es.close(); 
       es = null; 
       os.close(); 
       os = null; 
      } catch (IOException e) { 
       return ""; 
      } 

      proc.destroy(); 
      proc = null; 
     } 


     if (errorBuffer.length() > 0) { 
      logger 
        .error("could not finish execution because of error(s)."); 
      logger.error("*** Error : " + errorBuffer.toString()); 
      return ""; 
     } 


     return outputReport.toString(); 
    } 

, но когда я пытаюсь EXEC команды как:

/export/home/test/myapp -T "some argument" 

MyApp читает "some argument", как два отделено arguments.but Я хочу прочитать "some argument" как только аргумент. Когда я непосредственно запускаю эту команду с терминала, она выполнена успешно. Я пробовал '"some argument"', ""some argument"", "some\ argument", но не работал для меня. как я могу прочитать этот аргумент как один аргумент.

ответ

16

Я помню, что перегрузка метода exec предоставляет параметр для аргументов отдельно. Вы должны использовать это

Yup. Вот это

public Process exec(String[] cmdarray) 
      throws IOException 

Просто сделать из командной строки и все аргументы Seperate элементы массива Струнный

+0

thx @midhat. это работает для меня. – Aykut

+0

[Когда 'Runtime.exec()' не будет: перемещаться вокруг ловушек, связанных с методом Runtime.exec() ') (http://www.javaworld.com/article/2071275/core-java/when -runtime-exec --- won-t.html) или, возможно, будущий запрос [поисковый запрос] (https://duckduckgo.com/?q=When+Runtime.exec+wont+Navigate+yourself+around+ подводные камни + + связанные с + метод + Runtime.exec +). –

-3

первым Сформируйте строку
строковых ЦМД = «/ экспорт/дома/испытания/MyApp -T \» некоторый аргумент \ "";
затем запустить cmd в proc

+2

Это абсолютно ничего, кроме того, что уже указал Айкут. –

+0

@MiladNaseri За исключением того, что он правильно избегает кавычек, которые были фактической ошибкой Айкута. – Silveri

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