запустить команду оболочки из Java - PullRequest
7 голосов
/ 17 марта 2010

Я работаю над приложением, и у меня возникла проблема с запуском команды оболочки из приложения 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();
    }

но когда я пытаюсь выполнить команду вроде:

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

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

Ответы [ 2 ]

16 голосов
/ 17 марта 2010

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

Да. Вот оно

public Process exec(String[] cmdarray)
             throws IOException

Просто сделать командную строку и все аргументы отдельными элементами массива String

0 голосов
/ 17 мая 2011

сначала сделайте строку
String cmd = "/ export / home / test / myapp -T \" некоторый аргумент \ "";
затем запустите cmd в proc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...