Pergunta

Eu tenho um executivo (string cmd) em um script JSP que chama o método EXEC da classe de tempo de execução.

Funciona quando chamo um comando local, como um script PHP armazenado no servidor. por exemplo:/usr/bin/php/path/to/php/script arg1 arg2

Então, acho que meu comando de execução está ok, pois está trabalhando com isso.

Agora, quando tento ligar para o Lynx, o navegador da Web baseado em texto, ele não funciona.

Se eu chamar isso de terminal, ele funciona bem:/usr/bin/lynx -dump -accept_all_cookies 'http://www.womeurl.net/?arg1=1&arg2=2'

Mas quando eu chamo isso do meu comando de execução, nada acontece ...

Alguma ideia do porquê?

Este é o meu método de execução:

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;

    }
Foi útil?

Solução 2

Eu resolvi .... ligando para o Lynx para um script php, script PHP que eu liguei do script JSP ...

É uma solução de merda, mas pelo menos funciona ... Eu ainda não entendo por que o comando EXEC da Java funciona dessa maneira ...

Obrigado pela sua ajuda de qualquer maneira Andrzej (tcheco, acho que pelo nome ..? ^_ ^), De alguma forma você me colocou a caminho!

Outras dicas

Você precisa ler do Process'Stream de saída.

Como não está, o processo Lynx subjacente provavelmente está bloqueando ao escrever a saída, aguardando alguém para esvaziar o buffer do fluxo de saída. Mesmo se você vai ignorar a saída, precisará lê -lo de qualquer maneira para que o processo seja executado como você esperaria.

Enquanto o Javadocs do processo Digamos: "Como algumas plataformas nativas fornecem apenas tamanho limitado de buffer para fluxos de entrada e saída padrão, a falha em gravar imediatamente o fluxo de entrada ou ler o fluxo de saída do subprocesso pode fazer com que o subprocesso bloqueie e até o impasse".

Ver http://www.javaworld.com/javaworld/jw-2000/jw-1229-traps.html Para alguns exemplos de como lidar com isso.

EDIT: Caso você esteja se perguntando, é provável que, quando você invocou o script PHP, ele não produziu muita saída e, portanto, conseguiu terminar antes de preencher o buffer de saída e bloquear. O comando lynx presumivelmente está produzindo mais saída e, portanto, atingindo esse problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top