Domanda

Ho un execute (String cmd) in uno script jsp che chiama il metodo exec dalla classe Runtime.

Funziona quando chiamo un comando locale, come uno script php memorizzato sul server. per esempio: / usr / bin / php / path / to / php / script arg1 arg2

Quindi credo che il mio comando eseguito è ok, dal momento che si sta lavorando con quello.

Ora, quando provo a chiamare lince, il browser web basato su testo, non funziona.

Se io lo chiamo in un terminale, funziona benissimo: / Usr / bin / lynx -dump -accept_all_cookies ' http://www.someurl.net/ ? arg1 = 1 & arg2 = 2 '

Ma quando io chiamo questo dal mio comando di esecuzione, non succede nulla ...

Qualsiasi idea del perché?

Questo è il mio metodo di esecuzione:

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;

    }
È stato utile?

Soluzione 2

ho risolto .... chiamando la lince in uno script php, script php che ho chiamato dallo script Jsp ...

E 'una soluzione di merda, ma almeno funziona ... io ancora non capisco il motivo per cui il comando exec da Java funziona in questo modo ...

Grazie per il vostro aiuto in ogni caso Andrzej (Repubblica ho intuire dal nome ..? ^ _ ^), In qualche modo si mi ha messo sulla strada!

Altri suggerimenti

Hai bisogno di leggere dal Process' flusso di output.

Dal momento che non sei, il processo di lince sottostante è probabile bloccando durante la scrittura di uscita, in attesa che qualcuno per svuotare il buffer del flusso di output. Anche se si sta andando a ignorare l'uscita, è necessario leggere comunque per il processo da eseguire come ci si aspetterebbe .

javadocs di processo dire, "Poiché alcune piattaforme native forniscono soltanto formato buffer limitato per i flussi di ingresso e di uscita standard, mancata prontamente scrivere flusso in entrata o leggere il flusso di uscita del sottoprocesso può causare il sottoprocesso blocco, e anche deadlock."

http: //www.javaworld. com / JavaWorld / JW-12-2000 / JW-1229-traps.html per alcuni esempi di come gestire questa situazione.

Edit: nel caso in cui vi state chiedendo, è probabile che, quando è stato richiamato lo script PHP non ha prodotto una grande quantità di uscita, e così è stato in grado di terminare prima di riempire il buffer di output e il blocco. Il comando lince è presumibilmente producendo più uscita e quindi colpire questo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top