Pregunta

Tengo una execute (Cadena CMD) en un script JSP que llama al método exec de la clase en tiempo de ejecución.

Funciona cuando llamo a un mando local, como un script php almacenada en el servidor. por ejemplo: / usr / bin / php / ruta / a / php / script arg1 arg2

Así que supongo que mi comando de ejecución está bien, ya que está trabajando en ello.

Ahora cuando intento lince llamada, el navegador web basado en texto, que no funciona.

Si lo llamo en un terminal, que funciona bien: / Usr / bin / lince -dump -accept_all_cookies ' http://www.someurl.net/ ? arg1 = 1 & arg2 = 2 '

Pero cuando llamo a esto desde mi comando de ejecución, no pasa nada ...

Cualquier idea de por qué?

Este es mi método de ejecución:

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;

    }
¿Fue útil?

Solución 2

Lo resuelto .... llamando al lince en un script php, script PHP que me llamó desde el guión JSP ...

Es una solución de mierda, pero al menos funciona ... Yo todavía no entiendo realmente por qué el comando exec desde Java funciona de esa manera ...

Gracias por su ayuda de todos modos Andrzej (I Checa deducir del nombre ..? ^ _ ^), Que de alguna manera me pusieron en el camino!

Otros consejos

Es necesario leer desde el Process' flujo de salida.

Dado que no es así, el proceso subyacente es probable lince bloqueando mientras que la escritura de salida, esperando a alguien para vaciar el búfer de la secuencia de salida. Incluso si usted va a hacer caso omiso de la salida, se necesita leer todos modos para el proceso de ejecutar como era de esperar .

A medida que el javadocs de Proceso digamos, "Debido a que algunas plataformas nativas sólo proporcionan tamaño del búfer limitado para los flujos de entrada y salida estándar, la falta de prontitud escribir el flujo de entrada o leer el flujo de salida del subproceso puede hacer que el subproceso de bloque, e incluso un punto muerto."

http: //www.javaworld. com / JavaWorld / JW-12-2000 / JW-1229-traps.html para algunos ejemplos de cómo manejar esto.

Edit: en el caso de que se preguntan, lo más probable es que el momento de invocar el script PHP que no produjo una gran cantidad de la producción, y así fue capaz de terminar antes de llenar el buffer de salida y el bloqueo. El comando lince está produciendo presumiblemente una mayor producción y por lo tanto golpear a este problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top