Вопрос

У меня есть выполнение (String CMD) в сценарии JSP, который вызывает метод EXEC от класса выполнения.

Он работает, когда я называю локальную команду, как скрипт PHP, хранящийся на сервере. Например: / usr / bin / php / path / to / php / script arg1 arg2

Поэтому я предполагаю, что моя команда Execute в порядке, поскольку это работает с этим.

Теперь, когда я пытаюсь позвонить в Lynx, текстовый веб-браузер, он не работает.

Если я назову это в терминале, он работает нормально: / usr / bin / lynx -dump -accept_all_cookies 'http://www.someurl.net/?Arg1=1&arg2=2.'

Но когда я называю это из моей команды Execute, ничего не происходит ...

Любая идея почему?

Это мой метод Execute:

public String execute(String cmd){


        Runtime r = Runtime.getRuntime();
        Process p = null;
        String res = "";

        try {
                    p = r.exec(cmd);
                    InputStreamReader isr = new InputStreamReader(p.getInputStream());
                    BufferedReader br = new BufferedReader(isr);
                    String line = null;
                    //out.println(res);
                    while ((line = br.readLine()) != null) {

                    res += line;

                    }
                    p.waitFor();
                    } catch (Exception e) {
                    res += e;
                    }
                    System.out.println(p.exitValue());

        return res;

    }
Это было полезно?

Решение 2

Я решил это .... вызывая Lynx в сценарий PHP, PHP-скрипт, который я позвонил из сценария JSP ...

Это дерьмовое решение, но, по крайней мере, он работает ... Я до сих пор не понимаю, почему команда Exec от Java работает таким образом ...

Спасибо за вашу помощь в любом случае Andrzej (чеш, я думаю, от имени ..? ^ _ ^), Как-то вы поставили меня на пути!

Другие советы

Вам нужно прочитать из Process«Выходной поток.

Поскольку вы нет, основной процесс Lynx, скорее всего, блокирует при записи вывода, ожидая, что кто-то будет опустошить буфер вывода. Даже если вы собираетесь игнорировать вывод, вам нужно все равно прочитать его в любом случае для процесса для выполнения, сколько вы ожидаете.

Как то Javadocs процесса Скажем, «потому что некоторые родные платформы предоставляют только ограниченный размер буфера для стандартных входных и выходных потоков, отказа, чтобы немедленно написать входной поток или прочитать выходной поток подпроцесса, может привести к тому, что подпроцессу блокируется и даже тупик».

Видеть http://www.javavorld.com/javaworld/jw-12-2000/jw-1229-traps.html. Для некоторых примеров того, как справиться с этим.

Редактировать: Если вы задаетесь вопросом, шансы заключаются в том, что когда вы вызывали PHP-скрипт, он не произвел много вывода, и поэтому смог прекратить расторгнуть перед заполнением выходного буфера и блокировки. Команда Lynx предположительно производит больше выходов и, следовательно, ударяет эту проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top